MYSQL自定義排序,欄位置頂等
阿新 • • 發佈:2018-12-25
在MYSQL資料庫查詢時,排序是經常用到的一個功能。單純按照某欄位排序查詢較為簡單,無非就是order by `field` (DESC/ASC)。如:
1 | SELECT * FROM `table` |
2 | ORDER BY `field` DESC |
注:上面的table換成要查詢的表名,field換成要排序的欄位名,DESC表示從大到小,去掉則從小到大。
下面介紹幾個複雜一點的應用:
自定義排序
需求:查詢table表,取出id為1,5,9,7的記錄,並按1597的順序顯示.
解決:
1 | SELECT * FROM `table` |
2 | WHERE id in(1,5,7,9) |
3 | ORDER BY FIELD(`id`,1,5,9,7) //注意FIELD後面無空格 |
文章置頂
需求一:查詢文章表table,取出所有文章,但欄位zj為1的記錄置頂(均以time欄位排序,time大的 放在前面)。
解決一:
1 | SELECT * FROM `table` |
2 | ORDER BY `zj` DESC,`time` DESC |
解決二:
1 | SELECT * FROM `table` |
2 | WHERE zj=1 |
3 | ORDER BY `time` DESC |
4 | UNION |
5 | SELECT * FROM `table` |
6 | WHERE zj!=1 |
7 | ORDER BY `time` DESC |
需求二:查詢文章表table,取出所有文章,置頂ID為1、5、12、2的文章,並按上述順序顯示。
解決:
1 | SELECT * FROM `table` |
2 | ORDER BY FIELD(`zj`,1,5,12,2) DESC,`time` DESC |