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

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

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一下?
其實可以如許

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

出來的次序就是指定的次序了
關於這類排序的效力,
有文章指出:

FIELD(str,str1,str2,str3,…)
Returns the index (position) of str in the str1, str2, str3, … list. Returns 0 if str is not found.

排序進程:把選出的記載的 id 在 FIELD 列表中停止查找,並前往地位,以地位作為排序根據。
如許的用法,會招致 Using filesort,是效力很低的排序方法。除非數據變更頻率很低,或許有長時光的緩存,不然不建議用如許的方法排序。
作者建議在法式代碼中自行排序。
然則也有人說這類排序不會湧現甚麼機能瓶頸
詳細照樣本身測試一下吧。

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