【发布时间】:2017-02-21 10:27:03
【问题描述】:
我正在使用 MySql C API 并进行各种查询,我发现每次检查查询以查看列顺序非常不方便。此外,这种方法在查询编辑的情况下很容易出错。
我可以通过查询每列序数来分配什么吗?
如果没有,有没有更方便的方法通过 C API 检索结果? (目前使用mysql_fetch_row 并使用下标运算符访问列id)。
请注意我阅读了类似的问题Is it possible to sort the order in which columns are returned in a mysql SELECT statement?,但我发现它与我的情况不同,因为我需要分配任意数量的列序号。
编辑:
现状
查询:SELECT A.a, A.b, A.c FROM tbl1 A INNER JOIN tbl2 B ON B.id = A.B_id
c 代码:
...
MYSQL_ROW row = mysql_fetch_row(result);
unsigned long *lengths = mysql_fetch_lengths(result);
...
int field1 = atoi(row[0]);
memcpy(row[1], field2, lengths[1]);
..continue for each row..
期望的情况
查询:SELECT A.a ORDINAL 1, A.b ORDINAL 2, A.c ORDINAL 3 FROM tbl1 A INNER JOIN tbl2 B ON B.id = A.B_id
c代码:同上。
ORDINAL 语句是伪 SQL 语句,允许对返回的列进行任意排序。
【问题讨论】:
-
谁为 close 投票可以而且应该解释他/她为什么这样做以及如何改进问题。
-
更好地了解您想要实现的目标可能会有所帮助。也许,您可以使用 mysql_fetch_fields 函数将列名与列号相关联。
-
不,没有。该顺序在查询的
SELECT <here>部分中指定。如果查询中没有指定顺序,那么您可以假设它是任意的(尽管它可能是创建顺序)。 -
@PaulF:我刚刚根据您的建议编辑了问题。希望现在更清楚了。
-
你不能只创建一个常量列表并使用它们 - 在创建查询字符串的位置分配它们并在更新查询时进行修改。例如 const int col_Aa=0;常量 int col_Ab=1; ....... int field1 = atoi(row[col_Aa]); memcpy(row[col_Ab], field2, lengths[col_Ab]);
标签: mysql sql c mysql-connector