猿问

MySQL查询在更新后以不同的顺序返回列

我的一个程序是使用此查询来获取所选表列的详细信息:


SELECT c.COLUMN_NAME as column_name,

       c.COLUMN_TYPE as column_type,

       c.CHARACTER_MAXIMUM_LENGTH as length,

       c.TABLE_NAME as table_name,

       c.COLUMN_COMMENT as column_comment,

       k.REFERENCED_TABLE_NAME as reference_table,

       k.REFERENCED_COLUMN_NAME as reference_column

FROM information_schema.COLUMNS as c

LEFT JOIN information_schema.KEY_COLUMN_USAGE as k

    ON (k.TABLE_SCHEMA=c.TABLE_SCHEMA

   AND k.TABLE_NAME=c.TABLE_NAME

   AND k.COLUMN_NAME=c.COLUMN_NAME

   AND k.POSITION_IN_UNIQUE_CONSTRAINT IS NOT NULL)

 WHERE c.TABLE_SCHEMA='$db_name'

   AND c.TABLE_NAME='$table_name'

以前的结果是:


数组(36) { [0]=> 数组(7) { ["column_name"]=> 字符串(2) "id" ["column_type"]=> 字符串(7) ...


该表中的第一列是id,在结果数组中,第一个索引是id(因为它应该是)。


然而,现在,在更新 PHP(从 5.6 到 7.3)和 MySQL 之后,结果排序有所不同。


它不是根据列的创建日期优先级进行排序,而是根据一些未知元素(id数组中的第三个索引)进行排序。


这是一个错误还是什么?我怎样才能找回原来的排序顺序?


好吧,我刚刚想通了一些事情。MySQL首先使用外键对列进行排序,然后是其余列。


我不要这个!我怎样才能找回原来的排序顺序?



哆啦的时光机
浏览 152回答 2
2回答

犯罪嫌疑人X

我不知道为什么你的输出改变了,但我认为要得到你想要的输出,你可以使用一个ORDER BY子句按序号位置排序。ORDER BY c.ORDINAL_POSITION当我在我自己的一个 MySQL 数据库上运行您的查询时,我在您的ed 列c.*列表中添加了一个。SELECT从显示的所有额外列中,这ORDINAL_POSITION似乎就是您要查找的内容。所以你的最终查询可能看起来像这样:SELECT c.COLUMN_NAME as column_name,       c.COLUMN_TYPE as column_type,       c.CHARACTER_MAXIMUM_LENGTH as length,       c.TABLE_NAME as table_name,       c.COLUMN_COMMENT as column_comment,       k.REFERENCED_TABLE_NAME as reference_table,       k.REFERENCED_COLUMN_NAME as reference_columnFROM information_schema.COLUMNS as cLEFT JOIN information_schema.KEY_COLUMN_USAGE as k    ON (k.TABLE_SCHEMA=c.TABLE_SCHEMA      AND k.TABLE_NAME=c.TABLE_NAME      AND k.COLUMN_NAME=c.COLUMN_NAME      AND k.POSITION_IN_UNIQUE_CONSTRAINT IS NOT NULL)WHERE c.TABLE_SCHEMA='$db_name'      AND c.TABLE_NAME='$table_name'ORDER BY c.ORDINAL_POSITION

MYYA

SQL 表中没有“默认”排序顺序,至少没有 ANSI 标准要求的排序顺序(或者,正如您在此处看到的,由 MySQL 实现)。如果您希望结果集按特定顺序排列,则应添加适当的ORDER BY子句,例如SELECT    c.COLUMN_NAME as column_name,    c.COLUMN_TYPE as column_type,    ...ORDER BY    c.COLUMN_NAME;至于为什么感知的排序顺序发生了变化,可能与从数据库中获取记录的方式有关。随着底层数据的变化,MySQL 选择访问记录的方式也可能发生变化。
随时随地看视频慕课网APP
我要回答