【问题标题】:Rearranging column order in SELECT statement on MySql在 MySql 上的 SELECT 语句中重新排列列顺序
【发布时间】: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


【解决方案1】:

我已经很久没有给 编码了,很抱歉回答而不是评论(分数不够),但也许mysql_fetch_field_direct() 可能会有所帮助?

【讨论】:

    【解决方案2】:

    我不确定你想要什么,但也许这行得通:

    SELECT A.a AS 1, A.b AS 2, A.c AS 3 FROM tbl1 A INNER JOIN tbl2 B ON B.id = A.B_id
    

    这将返回您想要的名称为“1”、“2”、“3”等的字段。 (我不确定是否接受仅数字的列名。)

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 2011-09-26
      • 2012-08-19
      相关资源
      最近更新 更多