假设我有一个数据库,该表包含ide为1到20的行。
我想首先返回ID为3,4,1的3行,然后返回其他行。这是我的代码:
SELECT id
FROM prod
ORDER BY field( id, 3, 4, 1 )
LIMIT 20
这是此代码的结果:
id
13
17
16
15
7
6
5
2
3
4
1
奇怪的是,我需要先出现的3行最后显示,
如何将这3行带到列表顶部?
谢谢
答案 0 :(得分:10)
您可以使用desc
:
SELECT id
FROM prod
ORDER BY field( id, 3, 4, 1 ) DESC
LIMIT 20
问题在于,当您按升序执行升序时,MySQL会先放置NULL
值。
如果你真的想要按顺序3,4,1的行(这个问题对这个要求很模糊),那么在field
语句中反转它们:
SELECT id
FROM prod
ORDER BY field( id, 1, 4, 3 ) DESC
LIMIT 20
或者,如果你想成为幻想:
ORDER BY - field( id, 3, 4, 1 ) DESC
答案 1 :(得分:2)
另一种方法是使用case-when
并为每个id
提供order value
select * from prod
order by
case
when id = 3 then 0
when id=4 then 1
when id=1 then 2
else 3
end,id
limit 20
;
答案 2 :(得分:0)
尝试使用DESC
SELECT id
FROM prod
ORDER BY field( id, 3, 4, 1 ) DESC
LIMIT 20
看来你的id命令很重要。反转数字以获得正确的结果
SELECT id
FROM prod
ORDER BY field( id, 1, 4, 3 ) DESC
LIMIT 20
答案 3 :(得分:0)
未经测试,但您可以尝试
SELECT id,
(
CASE
WHEN id = '3' THEN 0
WHEN id = '4' THEN 1
WHEN id = '1' THEN 2
END
) as rank
FROM prod
ORDER BY rank
LIMIT 20;