这是一个查询:
SELECT *
FROM table
WHERE id = 1
OR id = 100
OR id = 50
请注意,我按以下顺序提供了 ID:1,100,50。
我希望这些行按以下顺序返回:1,100,50。
目前,我回来了 1,50,100 - 基本上是按升序排列。假设表中的行也按升序插入。
使用 MySQL 特定的FIND_IN_SET函数:
SELECT t.*
FROM table t
WHERE t.id IN (1, 100, 50)
ORDER BY FIND_IN_SET(CAST(t.id AS VARCHAR(8)), '1,100,50')
解决此问题的另一种方法是将列表放在子查询中:
select table.*
from table join
(select 1 as id, 1 as ordering union all
select 100 as id, 2 as ordering union all
select 50 as id, 3 as ordering
) list
on table.id = list.id
order by list.ordering
你可以这样做ORDER BY
:
ORDER BY
id = 1 DESC, id = 100 DESC, id = 50 DESC
0
1
在之前ORDER BY
。
试试这个
SELECT *
FROM new
WHERE ID =1
OR ID =100
OR ID =50
ORDER BY ID=1 DESC,ID=100 DESC,ID=50 DESC ;
... WHERE id IN (x,y,x) ORDER BY FIELD (id,x,y,z)