MYSQL:按搜索查询IN功能排序?

时间:2013-03-07 17:43:44

标签: mysql

我有一个问题:

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

如何更改查询以获取:

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

对于第二个查询?换句话说,按IN查询​​中的项目顺序排序结果?是否可以这样说:

ORDER BY ID (2,3,1) 

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

您可以在CASE子句中使用ORDER BY表达式:

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

答案 2 :(得分:0)

你必须使用ORDER BY <ASC/DESC>

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