程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL查詢結果按某值排序

MySQL查詢結果按某值排序

編輯:MySQL綜合教程

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語法

  1. FIND_IN_SET(str,strlist)   
  2.  

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

  1. mysql> SELECT FIND_IN_SET('b','a,b,c,d');  
  2.  
  3.         -> 2  
  4.  

看了這個我估計結果為什麼要加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...

表結構如下:

  1. mysql> select * from test;  
  2. +----+-------+  
  3. | id | name   |  
  4. +----+-------+  
  5. |   1 | test1 |  
  6. |   2 | test2 |  
  7. |   3 | test3 |  
  8. |   4 | test4 |  
  9. |   5 | test5 |  
  10. +----+-------+  

執行以下SQL:

  1. mysql> select * from test where id in(3,1,5);  
  2. +----+-------+  
  3. | id | name   |  
  4. +----+-------+  
  5. |   1 | test1 |  
  6. |   3 | test3 |  
  7. |   5 | test5 |  
  8. +----+-------+  
  9. 3 rows in set (0.00 sec)  

這個select在mysql中得結果會自動按照id升序排列,
但是我想執行"select * from test where id in(3,1,5);"的結果按照in中得條件排序,即:3,1,5,想得到的結果如下:
id name
3 test3
1 test1
5 test5

方法如下:

  1. select * from test where id in(3,1,5) order by find_in_set(id,'3,1,5');  
  2. select * from test where id in(3,1,5) order by substring_index('3,1,2',id,1);  

兩者均可

使用函數實現MySQL查詢行號

MySQL查詢中的非空問題

MySQL日期函數和時間函數

兩種常用MySql查詢時間段的方法

深度解析MySQL查詢緩存機制

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved