亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

之前有一個(gè)功能修改,要求MySQL查詢(xún)結(jié)果中:

id name * * *

1 lucy ...

3 lucy ...

2 lily ...

4 lucy ...

名字為lucy的優(yōu)先排在前面,百思不得其解,可能有人會(huì)說(shuō)簡(jiǎn)單 union嘛 或者弄個(gè)臨時(shí)表什么的,其實(shí)我也想過(guò),但是本身SQL邏輯就很多了(上面只是簡(jiǎn)例),再u(mài)nion的話(huà)或者臨時(shí)表可能繞很大的彎路,后來(lái)看到一篇文章嘗試著加入order by find_in_set(name,'lucy') ,結(jié)果 得到的結(jié)果為lucy全部在下面,隨即我改為order by find_in_set(name,'lucy') desc 實(shí)現(xiàn)結(jié)果為

id name * * *

1 lucy ...

3 lucy ...

4 lucy ...

2 lily ...

基本實(shí)現(xiàn),可是又有點(diǎn)不確定的心情,查mysql文檔發(fā)現(xiàn)find_in_set語(yǔ)法

FIND_IN_SET(str,strlist)  
 

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

mysql> SELECT FIND_IN_SET('b','a,b,c,d'); 
 
    -> 2 

 
看了這個(gè)我估計(jì)結(jié)果為什么要加desc 了 find_in_set返回的值是,當(dāng)存在lucy的時(shí)候 返回他的位置,沒(méi)有的時(shí)候?yàn)?,空的時(shí)候null,所以排序?yàn)?,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) 

這個(gè)select在mysql中得結(jié)果會(huì)自動(dòng)按照id升序排列,

如果我們

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

這樣的情況取出來(lái)后,其實(shí),id還是按1,2,3,4,5,6,7,8,9,排序的,但如果我們真要按IN里面的順序排序怎么辦?SQL能不能完成?是否需要取回來(lái)后再foreach一下?
其實(shí)可以這樣

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

出來(lái)的順序就是指定的順序了
關(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.

排序過(guò)程:把選出的記錄的 id 在 FIELD 列表中進(jìn)行查找,并返回位置,以位置作為排序依據(jù)。
這樣的用法,會(huì)導(dǎo)致 Using filesort,是效率很低的排序方式。除非數(shù)據(jù)變化頻率很低,或者有長(zhǎng)時(shí)間的緩存,否則不建議用這樣的方式排序。
作者建議在程序代碼中自行排序。
但是也有人說(shuō)這種排序不會(huì)出現(xiàn)什么性能瓶頸
具體還是自己測(cè)試一下吧。

相關(guān)文章

  • MySQL多表查詢(xún)機(jī)制

    MySQL多表查詢(xún)機(jī)制

    這篇文章主要介紹了MySQL多表查詢(xún)機(jī)制,多表查詢(xún)首先離不開(kāi)等值連接,下文我們從等值連接展開(kāi)詳細(xì)內(nèi)容,具有一定的參考價(jià)值需要的小伙伴可以參考一下
    2022-03-03
  • MySQL查詢(xún)出現(xiàn)1055錯(cuò)誤的原因及解決方法

    MySQL查詢(xún)出現(xiàn)1055錯(cuò)誤的原因及解決方法

    Mysql在使用過(guò)程中經(jīng)常遇到錯(cuò)誤,都是本人在實(shí)際應(yīng)用中處理檢驗(yàn)過(guò)的,本文對(duì)常見(jiàn)錯(cuò)誤出現(xiàn)的代碼進(jìn)行詳細(xì)分析,下面這篇文章主要給大家介紹了關(guān)于MySQL查詢(xún)出現(xiàn)1055錯(cuò)誤的原因及解決方法,需要的朋友可以參考下
    2023-05-05
  • MySQL如何查詢(xún)數(shù)據(jù)庫(kù)中所有表名及注釋等信息

    MySQL如何查詢(xún)數(shù)據(jù)庫(kù)中所有表名及注釋等信息

    這篇文章主要介紹了MySQL如何查詢(xún)數(shù)據(jù)庫(kù)中所有表名及注釋等信息問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 從MySQL全庫(kù)備份中恢復(fù)某個(gè)庫(kù)和某張表的方法

    從MySQL全庫(kù)備份中恢復(fù)某個(gè)庫(kù)和某張表的方法

    這篇文章主要介紹了從MySQL全庫(kù)備份中恢復(fù)某個(gè)庫(kù)和某張表的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • mysql err錯(cuò)誤提示You need to use --log-bin to make --binlog-format work.

    mysql err錯(cuò)誤提示You need to use --log-

    今天在檢查mysql服務(wù)器錯(cuò)誤日志的時(shí)候發(fā)現(xiàn)You need to use --log-bin to make --binlog-format work,通過(guò)如下方法解決了特分享一下
    2023-06-06
  • mysql免安裝版配置教程

    mysql免安裝版配置教程

    這篇文章主要為大家詳細(xì)介紹了mysql免安裝版配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL中存儲(chǔ)過(guò)程的詳細(xì)詳解

    MySQL中存儲(chǔ)過(guò)程的詳細(xì)詳解

    存儲(chǔ)過(guò)程就是一條或者多條SQL語(yǔ)句的集合,可以視為批文件,它可以定義批量插入的語(yǔ)句,也可以定義一個(gè)接收不同條件的SQL,下面這篇文章主要給大家介紹了關(guān)于MySQL中存儲(chǔ)過(guò)程的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • MySQL如何使用視圖插入修改刪除數(shù)據(jù)

    MySQL如何使用視圖插入修改刪除數(shù)據(jù)

    視圖除了進(jìn)行查詢(xún)記錄外,也可以利用視圖進(jìn)行插入、更新、刪除記錄的操作,減少對(duì)基表中信息的直接操作,提高了數(shù)據(jù)的安全性,下面這篇文章主要給大家介紹了關(guān)于MySQL如何使用視圖插入修改刪除數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • MySQL命令無(wú)法輸入中文問(wèn)題的解決方式

    MySQL命令無(wú)法輸入中文問(wèn)題的解決方式

    這篇文章主要給大家介紹了關(guān)于MySQL命令無(wú)法輸入中文問(wèn)題的解決方式,文中給出了詳細(xì)的解決方案,對(duì)遇到這個(gè)問(wèn)題的同學(xué)有很大的幫助,需要的朋友可以參考下
    2021-08-08
  • 詳解MySQL恢復(fù)psc文件記錄數(shù)為0的解決方案

    詳解MySQL恢復(fù)psc文件記錄數(shù)為0的解決方案

    這篇文章主要介紹了詳解MySQL恢復(fù)psc文件記錄數(shù)為0的解決方案,遇到這個(gè)問(wèn)題的朋友,可以看一下。
    2016-11-11

最新評(píng)論