[轉]http://www.php42.com/index.php/database/35-sql/237-mysql-order-by-list

aHR0cDovL3N0YXRpYy5ibG9nLmNzZG4ubmV0L3hoZWRpdG9yL3hoZWRpdG9yX2Vtb3QvZGVmYXVsdC9zbWlsZS5naWY=

問題描述

大家都知道, MySQL 中按某字段升序排列的 SQL 為 (以 id 為例, 下同):

SELECT * FROM `MyTable`

WHERE `id` IN (1, 7, 3, 5)

ORDER BY `id` ASC

降序排列的 SQL 為:

SELECT * FROM `MyTable`

WHERE `id` IN (1, 7, 3, 5)

ORDER BY `id` DESC

有時以上排序並不能滿足我們的需求. 例如, 我們想要按 id 以 5, 3, 7, 1 的順序排列, 該如何實現. 這也是很多國內外同行經常遇到的問題之一.

下面我們給出按表中某字段, 以我們想要的列表方式排序的解決方案.

解決方案

用"按字段排序" (ORDER BY FIELD).

語法

ORDER BY FIELD(`id`, 5, 3, 7, 1)

要注意的是, FIELD 后面是沒有空格的.

因此, 完整的 SQL 為:

SELECT * FROM `MyTable`

WHERE `id` IN (1, 7, 3, 5)

ORDER BY FIELD(`id`, 5, 3, 7, 1)

常見應用

SELECT * FROM `MyTable`

WHERE `name` IN ('張三', '李四', '王五', '孫六')

ORDER BY FIELD(`name`, '李四', '孫六', '張三', '王五')

參考資料

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐