亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL查詢在更新后以不同的順序返回列

MySQL查詢在更新后以不同的順序返回列

PHP
哆啦的時光機 2022-06-17 17:02:49
我的一個程序是使用此查詢來獲取所選表列的詳細信息: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'以前的結果是:數組(36) { [0]=> 數組(7) { ["column_name"]=> 字符串(2) "id" ["column_type"]=> 字符串(7) ...該表中的第一列是id,在結果數組中,第一個索引是id(因為它應該是)。然而,現在,在更新 PHP(從 5.6 到 7.3)和 MySQL 之后,結果排序有所不同。它不是根據列的創建日期優先級進行排序,而是根據一些未知元素(id數組中的第三個索引)進行排序。這是一個錯誤還是什么?我怎樣才能找回原來的排序順序?好吧,我剛剛想通了一些事情。MySQL首先使用外鍵對列進行排序,然后是其余列。我不要這個!我怎樣才能找回原來的排序順序?
查看完整描述

2 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

我不知道為什么你的輸出改變了,但我認為要得到你想要的輸出,你可以使用一個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_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'

ORDER BY c.ORDINAL_POSITION


查看完整回答
反對 回復 2022-06-17
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

SQL 表中沒有“默認”排序順序,至少沒有 ANSI 標準要求的排序順序(或者,正如您在此處看到的,由 MySQL 實現)。如果您希望結果集按特定順序排列,則應添加適當的ORDER BY子句,例如


SELECT

    c.COLUMN_NAME as column_name,

    c.COLUMN_TYPE as column_type,

    ...

ORDER BY

    c.COLUMN_NAME;

至于為什么感知的排序順序發生了變化,可能與從數據庫中獲取記錄的方式有關。隨著底層數據的變化,MySQL 選擇訪問記錄的方式也可能發生變化。


查看完整回答
反對 回復 2022-06-17
  • 2 回答
  • 0 關注
  • 183 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號