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

將MySQL查詢結(jié)果按值排序的簡要教程

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

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

之前有一個功能修改,要求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返回的值是,當(dāng)存在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升序排列,

如果我們

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);

出來的順序就是指定的順序了
關(guān)于這種排序的效率,
有文章指出:

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 列表中進(jìn)行查找,并返回位置,以位置作為排序依據(jù)。
這樣的用法,會導(dǎo)致 Using filesort,是效率很低的排序方式。除非數(shù)據(jù)變化頻率很低,或者有長時間的緩存,否則不建議用這樣的方式排序。
作者建議在程序代碼中自行排序。
但是也有人說這種排序不會出現(xiàn)什么性能瓶頸
具體還是自己測試一下吧。

相關(guān)文章

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

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

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

    mysql中時間字段設(shè)置遇到的問題

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

    Ubuntu下完美實現(xiàn)遷移MySQL數(shù)據(jù)庫位置

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

    mysql數(shù)據(jù)庫中字段的注釋和類型長度獲取方式

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

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

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

    使用Shell腳本進(jìn)行MySql權(quán)限修改的實現(xiàn)教程

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

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

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

    Linux安裝mysql并配置外網(wǎng)訪問的實例

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

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

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

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

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

最新評論

额济纳旗| 平南县| 台南县| 卓资县| 闽侯县| 博白县| 东兰县| 车致| 饶河县| 南丹县| 南部县| 东兴市| 大田县| 繁昌县| 宁海县| 铜陵市| 高邑县| 子长县| 商丘市| 永济市| 双桥区| 兴国县| 临洮县| 永年县| 昭平县| 佛教| 丽江市| 方城县| 武威市| 淄博市| 苏尼特右旗| 临泉县| 弥渡县| 葵青区| 修武县| 阿勒泰市| 阳江市| 山西省| 含山县| 新丰县| 盐边县|