通过MySQL选择查询自定义顺序

时间:2011-07-27 14:28:32

标签: mysql sql sql-order-by

我想做类似这样的事情:select * from table order by id asc,但如果id为5(例如),则将其设为top,基本上为5,然后将所有其他ID命令为asc。

我该怎么办呢?

谢谢。

4 个答案:

答案 0 :(得分:4)

您还可以使用函数FIELD()

SELECT *
FROM table
ORDER BY FIELD(id, 5) DESC
       , id ASC

如果您希望首先使用say,id = 5,23,17的行,则可以使用:

SELECT *
FROM table
ORDER BY FIELD(id, 17, 23, 5) DESC
       , id ASC

答案 1 :(得分:3)

您可以使用我最初建议的UNION,并根据评论中@Mike的建议对两列进行排序。

(SELECT *, 1 single_id FROM table_name WHERE id = 5)
UNION ALL
(SELECT *, 2 all_ids FROM table_name WHERE id <> 5)
ORDER BY single_id, id

或者更好地使用IF语句,以避免两种类型的开销:

  SELECT *, IF(id = 5, -1, id) ordering 
    FROM table_name
ORDER BY ordering ASC

答案 2 :(得分:3)

SELECT *, CASE WHEN id = 5 THEN -1 ELSE id END AS ordering 
FROM table 
ORDER BY ordering ASC

答案 3 :(得分:2)

SELECT * FROM table_name ORDER BY id=7 DESC, id ASC

由于这不使用索引,我不建议在大型表上使用它。