MySQL用WHERE`id` IN(...)指定确切的顺序

时间:2010-06-02 13:21:41

标签: mysql sql-order-by in-clause

是否有一种简单的方法可以通过WHERE id IN(...)子句分别订购MySQL结果? 例如:

SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3)

返回

Article with id = 4
Article with id = 2
Article with id = 5
Article with id = 9
Article with id = 3

以及

SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3) LIMIT 2,2

返回

Article with id = 5
Article with id = 9

更新:更具体地说,我想避免篡改WHERE articles.id IN (4, 2, 5, 9, 3)中括号中的数据,因为这些ID是动态的并自动排序。

4 个答案:

答案 0 :(得分:14)

是的,有点:

SELECT * FROM articles
WHERE articles.id IN (4, 2, 5, 9, 3)
ORDER BY FIND_IN_SET(articles.id, '4,2,5,9,3')

但这是非标准的SQL并且有点气味。

答案 1 :(得分:3)

这对我有用: ORDER BY FIELD(Product.id,4,9,8,5,3,11,24,16)

答案 2 :(得分:1)

MySQL只对ORDER BY进行排序。这就是为什么数据库表具有像普通列一样的非常罕见的原因。

articles
+----+------------+-------+
| id | ordinality | (...) |
+----+------------+-------+
|  2 |          2 |    '' |
|  3 |          5 |    '' |
|  4 |          1 |    '' |
|  5 |          3 |    '' |
|  9 |          4 |    '' |
+----+------------+-------+

SELECT *
  FROM articles
 WHERE articles.id IN (4, 2, 5, 9, 3)
 ORDER BY articles.ordinality

答案 3 :(得分:0)

我认为你不能那样做。没有“明确”的排序正在进行; “in”语句只是告诉您要检索的内容,并且没有关于排序的信息。

由于您提供的示例没有明显的顺序,因此最好的办法是在返回结果后在代码中处理此问题。