我想做类似这样的事情:select * from table order by id asc
,但如果id为5(例如),则将其设为top,基本上为5,然后将所有其他ID命令为asc。
我该怎么办呢?
谢谢。
答案 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
由于这不使用索引,我不建议在大型表上使用它。