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

創(chuàng)新互聯(lián)建站專注于興和網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供興和營銷型網(wǎng)站建設(shè),興和網(wǎng)站制作、興和網(wǎng)頁設(shè)計、興和網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造興和網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供興和網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
之前有一個功能修改,要求MySQL查詢結(jié)果中:
id name * * *
1 lucy ...
3 lucy ...
2 lily ...
4 lucy ...
名字為lucy的優(yōu)先排在前面,百思不得其解,可能有人會說簡單 union嘛 或者弄個臨時表什么的,其實我也想過,但是本身SQL邏輯就很多了(上面只是簡例),再union的話或者臨時表可能繞很大的彎路,后來看到一篇文章嘗試著加入order by find_in_set(name,'lucy') ,結(jié)果 得到的結(jié)果為lucy全部在下面,隨即我改為order by find_in_set(name,'lucy') desc 實現(xiàn)結(jié)果為
id name * * *
1 lucy ...
3 lucy ...
4 lucy ...
2 lily ...
基本實現(xiàn),可是又有點不確定的心情,查mysql文檔發(fā)現(xiàn)find_in_set語法
- FIND_IN_SET(str,strlist)
假如字符串str 在由N 子鏈組成的字符串列數(shù)據(jù)表strlist 中, 則返回值的范圍在 1 到 N 之間 。一個字符串列數(shù)據(jù)表就是一個由一些被『,』符號分開的自鏈組成的字符串。如果***個參數(shù)是一個常數(shù)字符串,而第二個是type SET列,則 FIND_IN_SET() 函數(shù)被優(yōu)化,使用比特計算。如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個參數(shù)為NULL,則返回值為 NULL。 這個函數(shù)在***個參數(shù)包含一個逗號(『,』)時將無法正常運行
- mysql> SELECT FIND_IN_SET('b','a,b,c,d');
- -> 2
看了這個我估計結(jié)果為什么要加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...
表結(jié)構(gòu)如下:
- mysql> select * from test;
- +----+-------+
- | id | name |
- +----+-------+
- | 1 | test1 |
- | 2 | test2 |
- | 3 | test3 |
- | 4 | test4 |
- | 5 | test5 |
- +----+-------+
執(zhí)行以下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中得結(jié)果會自動按照id升序排列,
但是我想執(zhí)行"select * from test where id in(3,1,5);"的結(jié)果按照in中得條件排序,即:3,1,5,想得到的結(jié)果如下:
id name
3 test3
1 test1
5 test5
方法如下:
- select * from test where id in(3,1,5) order by find_in_set(id,'3,1,5');
- select * from test where id in(3,1,5) order by substring_index('3,1,2',id,1);
兩者均可
【編輯推薦】
使用函數(shù)實現(xiàn)MySQL查詢行號
MySQL查詢中的非空問題
MySQL日期函數(shù)和時間函數(shù)
兩種常用MySql查詢時間段的方法
深度解析MySQL查詢緩存機制
標題名稱:MySQL查詢結(jié)果按某值排序
文章網(wǎng)址:http://m.fisionsoft.com.cn/article/cdgiojg.html


咨詢
建站咨詢
