国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

將MySQL查詢結果按值排序的簡要教程

2024-07-24 12:45:17
字體:
來源:轉載
供稿:網友

MySQL查詢結果如何排序呢?這是很多人都提過的問題,下面就教您如何對MySQL查詢結果按某值排序,如果您感興趣的話,不妨一看。

之前有一個功能修改,要求MySQL查詢結果中:

id name * * *1 lucy ...3 lucy ...2 lily ...4 lucy ...

名字為lucy的優先排在前面,百思不得其解,可能有人會說簡單 union嘛 或者弄個臨時表什么的,其實我也想過,但是本身SQL邏輯就很多了(上面只是簡例),再union的話或者臨時表可能繞很大的彎路,后來看到一篇文章嘗試著加入order by find_in_set(name,'lucy') ,結果 得到的結果為lucy全部在下面,隨即我改為order by find_in_set(name,'lucy') desc 實現結果為

id name * * *1 lucy ...3 lucy ...4 lucy ...2 lily ...

基本實現,可是又有點不確定的心情,查mysql文檔發現find_in_set語法

FIND_IN_SET(str,strlist)

假如字符串str 在由N 子鏈組成的字符串列數據表strlist 中, 則返回值的范圍在 1 到 N 之間 。一個字符串列數據表就是一個由一些被『,』符號分開的自鏈組成的字符串。如果第一個參數是一個常數字符串,而第二個是type SET列,則   FIND_IN_SET() 函數被優化,使用比特計算。如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個參數為NULL,則返回值為 NULL。 這個函數在第一個參數包含一個逗號(『,』)時將無法正常運行

mysql> SELECT FIND_IN_SET('b','a,b,c,d'); -> 2

 
看了這個我估計結果為什么要加desc 了 find_in_set返回的值是,當存在lucy的時候 返回他的位置,沒有的時候為0,空的時候null,所以排序為1,1,1,0,如果加在列上就為

id name FIND_IN_SET * *
1 lucy 1 ...3 lucy 1 ...2 lily 0 ...4 lucy 1...

表結構如下:

mysql> select * from test;
+----+-------+ | id | name | +----+-------+ | 1 | test1 | | 2 | test2 | | 3 | test3 | | 4 | test4 | | 5 | test5 | +----+-------+

執行以下SQL:

mysql> select * from test where id in(3,1,5);
+----+-------+ | id | name | +----+-------+ | 1 | test1 | | 3 | test3 | | 5 | test5 | +----+-------+ 3 rows in set (0.00 sec)

這個select在mysql中得結果會自動按照id升序排列,

如果我們

select * from table where id IN (3,6,9,1,2,5,8,7);

這樣的情況取出來后,其實,id還是按1,2,3,4,5,6,7,8,9,排序的,但如果我們真要按IN里面的順序排序怎么辦?SQL能不能完成?是否需要取回來后再foreach一下?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹤山市| 盖州市| 兴化市| 梁河县| 东莞市| 仙居县| 南昌县| 车致| 乡城县| 揭西县| 罗定市| 白朗县| 海淀区| 曲麻莱县| 乌恰县| 灵山县| 宜君县| 从江县| 贡觉县| 乌什县| 陕西省| 龙海市| 满洲里市| 崇义县| 应用必备| 丹棱县| 丹阳市| 东阿县| 连南| 淄博市| 鄂州市| 同仁县| 珲春市| 阿图什市| 大港区| 远安县| 民县| 江安县| 南皮县| 什邡市| 靖宇县|