共計 1489 個字符,預計需要花費 4 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
怎么對 MySQL 查詢結果進行排序,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
MySQL 查詢結果如何排序
之前有一個功能修改,要求 MySQL 查詢結果中:
idname***
1lucy…
3lucy…
2lily…
4lucy…
名字為 lucy 的優先排在前面,百思不得其解,可能有人會說簡單 union 嘛或者弄個臨時表什么的,其實我也想過,但是本身 SQL 邏輯就很多了(上面只是簡例),再 union 的話或者臨時表可能繞很大的彎路,后來看到一篇文章嘗試著加入 orderbyfind_in_set(name, lucy), 結果得到的結果為 lucy 全部在下面,隨即我改為 orderbyfind_in_set(name, lucy)desc 實現結果為
idname***
1lucy…
3lucy…
4lucy…
2lily…
基本實現,可是又有點不確定的心情,查 mysql 文檔發現 find_in_set 語法
MySQL 查詢結果如何排序
FIND_IN_SET(str,strlist)
如果字符串 str 在由 N 子鏈組成的字符串列數據表 strlist 中,則返回值的范圍在 1 到 N 之間。一個字符串列數據表就是一個由一些被『,』符號分開的自鏈組成的字符串。如果第一個參數是一個常數字符串,而第二個是 typeSET 列,則 FIND_IN_SET()函數被優化,使用比特計算。如果 str 不在 strlist 或 strlist 為空字符串,則返回值為 0。如任意一個參數為 NULL,則返回值為 NULL。這個函數在第一個參數包含一個逗號 (『,』) 時將無法正常運行
mysql SELECTFIND_IN_SET(b , a,b,c,d – 2
看了這個我估計結果為什么要加 desc 了 find_in_set 返回的值是,當存在 lucy 的時候返回他的位置,沒有的時候為 0,空的時候 null, 所以排序為 1,1,1,0, 如果加在列上就為
idnameFIND_IN_SET**
1lucy1…
3lucy1…
2lily0…
4lucy1…
表結構如下:
mysql select*fromtest;+—-+——-+|id|name|+—-+——-+|1|test1||2|test2||3|test3||4|test4||5|test5|+—-+——-+
執行以下 SQL:
mysql select*fromtestwhereidin(3,1,5);+—-+——-+|id|name|+—-+——-+|1|test1||3|test3||5|test5|+—-+——-+3rowsinset(0.00sec)
這個 select 在 mysql 中得結果會自動按照 id 升序排列,
但是我想執行 select*fromtestwhereidin(3,1,5); 的結果按照 in 中得條件排序, 即:3,1,5, 想得到的結果如下:
idname
3test3
1test1
5test5
方法如下:
select*fromtestwhereidin(3,1,5)orderbyfind_in_set(id, 3,1,5 select*fromtestwhereidin(3,1,5)orderbysubstring_index(3,1,2 ,id,1);
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。
向 AI 問一下細節