2015-05-11 41 views
8

假設我有一個數據庫,表中包含ide從1到20的行。mysql - 按字段順序無法正常工作

我想返回3行與ID 3,4,1第一,然後返回其他行。這是我的代碼:

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行放到列表的頂部?

感謝

回答

6

您可以使用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 
+0

@sgtBOSE。 。 。我不確定評論應該是什麼。這將三行放在列表的頂部,這是OP要求的。 –

+0

解決方案現在在場。 :) –

0

嘗試用DESC

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

它看ms你的id命令很重要。反向號碼以獲得正確的結果

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

另一種方法是使用case-when,並給每個idorder 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 
; 
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;