SQL,“WHERE IN”返回自动排序的结果[重复]

Posted

技术标签:

【中文标题】SQL,“WHERE IN”返回自动排序的结果[重复]【英文标题】:SQL, "WHERE IN" returns automatically sorted result [duplicate] 【发布时间】:2017-10-07 23:35:24 【问题描述】:

当我使用 WHERE IN 语句运行查询时,它似乎会自动对返回的 product_id 进行排序。

$SQL = "SELECT * FROM PIM WHERE product_id in (10,8,1,3)";

foreach($conn->query($sql) as $row) 
  echo $row['product_id'] . "<br>";

结果:

1
3
8
10

我希望他们按照他们在 (10,8,1,3) 中输入的顺序返回

【问题讨论】:

它可能会按顺序返回它们;但除非您指定 ORDER BY 子句,否则返回顺序是不确定的 (ORDER BY FIELD(product_id, 10, 8, 1, 3)) 如果您希望 SQL 结果按特定顺序排列,则必须添加特定的ORDER BY 子句 "A common question on the mailing lists is how to sort results in a particular order. Just use the FIELD function:" 【参考方案1】:

由于在您的原始查询中您没有指定 mysql 应该使用哪个顺序,因此使用的是 ASC,请尝试像这样使用 ORDER BY FIELD():

SELECT * FROM PIM WHERE product_id in (10,8,1,3) ORDER BY FIELD(product_id, 10,8,1,3);

检查这个great answer for more details。

【讨论】:

谢谢,成功了:-)【参考方案2】:

试试:

select * from PIM where id in (1,3,8,10) order by find_in_set(id,'10,8,1,3');

【讨论】:

以上是关于SQL,“WHERE IN”返回自动排序的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE 查询去重保留第一条排序

让sql语句不排序,按照in语句的顺序返回结果

MYSQL 查询 WHERE IN 条件的问题

准备好的语句,`WHERE .. IN(..)` 查询和排序 - 使用 MySQL

Solr的查询结果去重

SQL多表联合查询按日期排序