8

有没有一种简单的方法可以通过 WHERE idIN (...) 子句分别对 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

4 回答 4

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,而且有点味道。

于 2010-06-02T13:41:29.527 回答
3

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

于 2012-11-27T12:05:11.720 回答
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
于 2010-06-02T13:31:05.030 回答
0

我不认为你能做到这一点。没有“显式”排序;“in”语句只是告诉你要检索什么,并且没有关于排序的信息。

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

于 2010-06-02T13:29:05.270 回答