0

我有一个查询:

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) 

?

4

3 回答 3

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)

在此处查看小提琴。

于 2013-03-07T17:58:17.593 回答
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

于 2013-03-07T18:03:28.393 回答
0

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

SELECT * FROM products WHERE id IN (1,2,3) order by id desc
于 2013-03-07T17:44:52.777 回答