是否有一种简单的方法可以通过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是动态的并自动排序。
答案 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”语句只是告诉您要检索的内容,并且没有关于排序的信息。
由于您提供的示例没有明显的顺序,因此最好的办法是在返回结果后在代码中处理此问题。