2013-03-07 61 views
0

我有一個查詢:MYSQL:按搜索查詢IN函數排序?

SELECT * FROM products WHERE id IN (1,2,3) 

這將返回:

ID | Title 
1 | Bla 
2 | Bla2 
3 | Bla3 

如果我更改查詢到:

SELECT * FROM products WHERE id IN (2,3,1) 

我仍然得到:

ID | Title 
1 | Bla 
2 | Bla2 
3 | Bla3 

如何我可以改變嗎? e我的查詢得到:

ID | Title 
2 | Bla2 
3 | Bla3 
1 | Bla 

對於第二個查詢?換句話說,按IN查詢​​中的項目順序排列結果?是否可以這樣說:

ORDER BY ID (2,3,1) 

回答

3

你可以使用這樣的事情:

SELECT * 
FROM products 
WHERE id IN (2,3,1) 
ORDER BY FIND_IN_SET(id, '2,3,1') 

或者你也可以通過命令:

ORDER BY FIELD(id, 3,2,1) 

請參閱小提琴here

0

,你必須使用ORDER BY <ASC/DESC>

SELECT * FROM products WHERE id IN (1,2,3) order by id desc 
+0

它真的就是這麼簡單 – 2013-03-07 17:45:43

+0

@JohnConde是的,先生,有時候我們看不到簡單的東西 – jcho360 2013-03-07 17:46:37

+0

如果什麼我這樣做:選擇*從產品哪裏id IN(2,3,1) - >這是我關心的...... – coderama 2013-03-07 17:48:01

3

您可以在ORDER BY子句中使用一個CASE表達:

SELECT * 
FROM products 
WHERE id IN (2,3,1) 
order by 
    case id 
    when 2 then 0 
    when 3 then 1 
    when 1 then 2 
    else 3 
    end 

SQL Fiddle with Demo