mysql - 按字段顺序无法正常工作

时间:2015-05-11 11:00:42

标签: php mysql

假设我有一个数据库,该表包含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行带到列表顶部?

谢谢

4 个答案:

答案 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;