MySQL使用(…)中的WHERE`id`指定确切顺序
有没有一种简单的方法可以通过WHEREMySQL使用(…)中的WHERE`id`指定确切顺序,mysql,sql-order-by,in-clause,Mysql,Sql Order By,In Clause,有没有一种简单的方法可以通过WHEREidIN(…)子句分别对MySQL结果排序? 例如: 归来 Article with id = 4 Article with id = 2 Article with id = 5 Article with id = 9 Article with id = 3 Article with id = 5 Article with id = 9 而且 SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9,
id
IN(…)子句分别对MySQL结果排序?
例如:
归来
Article with id = 4
Article with id = 2
Article with id = 5
Article with id = 9
Article with id = 3
Article with id = 5
Article with id = 9
而且
SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3) LIMIT 2,2
归来
Article with id = 4
Article with id = 2
Article with id = 5
Article with id = 9
Article with id = 3
Article with id = 5
Article with id = 9
更新:更具体地说,我想避免篡改(4,2,5,9,3)中的
WHERE articles.id中括号中的数据,因为这些id是动态的,并且是自动排序的。我认为您无法做到这一点。没有“明确的”命令;“in”语句只是告诉您要检索什么,没有关于排序的信息
由于您给出的示例没有明显的顺序,因此最好在返回结果后在代码中处理这个问题。MySQL只按顺序排序。这就是为什么数据库表具有类似于序号列的内容并不罕见的原因
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
是的,有点:
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,有点异味。这对我来说很有用:
按字段排序(Product.id,4,9,8,5,3,11,24,16)+1用于实用解决方案。至于“有点臭”的部分这两种方法都有效,而且实际上比我的机器上接受的答案更快。我测试了1000条记录,find_in_set
耗时0.03秒,field
耗时0.02秒。我想,这种差异会变得更大的集显着。我还使用了一个“LIMIT 2”子句进行了测试,find_in_set
实际上花费了更长的时间,即0.04秒,而field
仍然花费了0.02秒。我个人认为0.02秒还是相当慢的。OP应该小心不要传入大数据集,否则他会受到性能影响!