最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年12月09日 10:18:59   作者:Andyuan1000  
這篇文章主要介紹了將MySQL查詢結果按值排序的簡要教程,不過同樣需要對結果進行檢查而決定是否使用order by等其他語句,需要的朋友可以參考下

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

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

id name * * *

1 lucy ...

3 lucy ...

2 lily ...

4 lucy ...

名字為lucy的優(yōu)先排在前面,百思不得其解,可能有人會說簡單 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文檔發(fā)現find_in_set語法

FIND_IN_SET(str,strlist)  
 

假如字符串str 在由N 子鏈組成的字符串列數據表strlist 中, 則返回值的范圍在 1 到 N 之間 。一個字符串列數據表就是一個由一些被『,』符號分開的自鏈組成的字符串。如果第一個參數是一個常數字符串,而第二個是type SET列,則   FIND_IN_SET() 函數被優(yōu)化,使用比特計算。如果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 | 
+----+-------+ 

執(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中得結果會自動按照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,是效率很低的排序方式。除非數據變化頻率很低,或者有長時間的緩存,否則不建議用這樣的方式排序。
作者建議在程序代碼中自行排序。
但是也有人說這種排序不會出現什么性能瓶頸
具體還是自己測試一下吧。

相關文章

  • MySQL添加外鍵時報錯:1215 Cannot add the foreign key constraint的解決方法

    MySQL添加外鍵時報錯:1215 Cannot add the foreign key constraint的解決方法

    大家都知道MySQL中經常會需要創(chuàng)建父子表之間的約束,這個約束是需要建立在主外鍵基礎之上的,最近在MySQL添加外鍵時發(fā)現了一個報錯:1215 Cannot add the foreign key constraint,所以這篇文章就給大家介紹了如何解決在創(chuàng)建主外鍵約束過程中碰到的這個問題。
    2016-11-11
  • mysql中時間字段設置遇到的問題

    mysql中時間字段設置遇到的問題

    這篇文章主要介紹了mysql中時間字段設置遇到的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Ubuntu下完美實現遷移MySQL數據庫位置

    Ubuntu下完美實現遷移MySQL數據庫位置

    這篇文章主要介紹了Ubuntu下完美實現遷移MySQL數據庫位置,十分詳細,有需要的小伙伴可以參考下
    2015-03-03
  • mysql數據庫中字段的注釋和類型長度獲取方式

    mysql數據庫中字段的注釋和類型長度獲取方式

    這篇文章主要介紹了mysql數據庫中字段的注釋和類型長度獲取方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 大幅提升MySQL中InnoDB的全表掃描速度的方法

    大幅提升MySQL中InnoDB的全表掃描速度的方法

    這篇文章主要介紹了大幅提升MySQL中InnoDB的全表掃描速度的方法,作者談到了預讀取和多次async I/O請求等方法,減小InnoDB對MySQL速度的影響,需要的朋友可以參考下
    2015-06-06
  • 使用Shell腳本進行MySql權限修改的實現教程

    使用Shell腳本進行MySql權限修改的實現教程

    原先數據配置文件中有bind-address=127.0.0.1,注釋掉此配置后,原數據庫中默認帶%root的權限,現在需要通過腳本實現白名單列表中的ip添加權限允許訪問數據庫,本文給大家介紹了使用Shell腳本進行MySql權限修改的實現教程,需要的朋友可以參考下
    2024-03-03
  • MySql刪除表中一行的實操方法

    MySql刪除表中一行的實操方法

    在本篇文章中小編給大家整理了關于MySql刪除表中一行的實操方法以及實例分析,需要的朋友們參考下。
    2019-05-05
  • Linux安裝mysql并配置外網訪問的實例

    Linux安裝mysql并配置外網訪問的實例

    今天小編就為大家分享一篇Linux安裝mysql并配置外網訪問的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 解決Can''t locate ExtUtils/MakeMaker.pm in @INC報錯

    解決Can''t locate ExtUtils/MakeMaker.pm in @INC報錯

    今天小編就為大家分享一篇關于解決Can't locate ExtUtils/MakeMaker.pm in @INC報錯,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • mysql?sum(if())和count(if())的用法說明

    mysql?sum(if())和count(if())的用法說明

    這篇文章主要介紹了mysql?sum(if())和count(if())的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論

东至县| 诏安县| 青阳县| 防城港市| 大竹县| 册亨县| 永康市| 台东市| 长子县| 雷波县| 保德县| 巩义市| 寿宁县| 桃源县| 盐源县| 宁安市| 梁山县| 辽阳市| 浦东新区| 得荣县| 永宁县| 辉县市| 溆浦县| 桂林市| 冀州市| 张掖市| 庆元县| 沅江市| 华容县| 花莲市| 凤冈县| 莆田市| 苍南县| 西宁市| 西贡区| 沁源县| 珠海市| 绥芬河市| 桓仁| 富平县| 牟定县|