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

Php mysql-按字段排序无法正常工作,php,mysql,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行置于列表的顶部 谢谢您可以使用desc: SELECT id FROM prod

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


谢谢

您可以使用
desc

SELECT id
FROM prod
ORDER BY field( id, 3, 4, 1 ) DESC
LIMIT 20
问题是,当您按升序进行排序时,MySQL会将
NULL
值放在第一位

如果您确实希望行的顺序为3、4、1(此要求中的问题不明确),请在
字段中反转它们:

SELECT id
FROM prod
ORDER BY field( id, 1, 4, 3 ) DESC
LIMIT 20
或者,如果你想变得花哨:

ORDER BY - field( id, 3, 4, 1 ) DESC

尝试使用
DESC

SELECT id
FROM prod
ORDER BY field( id, 3, 4, 1 ) DESC
LIMIT 20
看来你的身份证顺序很重要。颠倒数字以得到正确的结果

SELECT id
FROM prod
ORDER BY field( id, 1, 4, 3 ) DESC
LIMIT 20

另一种方法是在
时使用
case,并为每个
id
提供一个
订单值

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
;

未测试,但您可以尝试

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;

@sgtBOSE。我不知道该怎么说。这将三行放在列表的顶部,这就是OP所要求的。解决方案现在就存在了。:)