Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL使用(…)中的WHERE`id`指定确切顺序_Mysql_Sql Order By_In Clause - Fatal编程技术网

MySQL使用(…)中的WHERE`id`指定确切顺序

MySQL使用(…)中的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,

有没有一种简单的方法可以通过WHERE
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应该小心不要传入大数据集,否则他会受到性能影响!