1. 程式人生 > >MYSQL自定義排序,欄位置頂等

MYSQL自定義排序,欄位置頂等

在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