mysql - 按 SQL IN() 子句中值的顺序排序

标签 mysql sql sql-order-by

我想知道是否有(可能是更好的方法)按照 IN() 子句中的值的顺序进行排序。

问题是我有 2 个查询,一个查询获取所有 ID,第二个查询检索所有信息。第一个创建了我希望第二个按照其排序的 ID 顺序。 ID 以正确的顺序放入 IN() 子句中。

所以它会像(极其简化):

SELECT id FROM table1 WHERE ... ORDER BY display_order, name

SELECT name, description, ... WHERE id IN ([id's from first])

问题是第二个查询返回结果的顺序与 ID 放入 IN() 子句的顺序不同。

我发现的一个解决方案是将所有 ID 放入一个带有自动递增字段的临时表中,然后将该字段连接到第二个查询中。

有更好的选择吗?

注意:由于第一个查询是“由用户”运行,而第二个查询是在后台进程中运行,因此无法使用子查询将 2 个查询合并为 1 个查询。

我正在使用 MySQL,但我认为让它记下其他数据库的选项可能会很有用。

最佳答案

使用MySQL的FIELD()功能:

SELECT name, description, ...
FROM ...
WHERE id IN([ids, any order])
ORDER BY FIELD(id, [ids in order])

FIELD() 将返回第一个参数的索引,该索引等于第一个参数(第一个参数本身除外)。

FIELD('a', 'a', 'b', 'c')

将返回 1

FIELD('a', 'c', 'b', 'a')

将返回 3

如果您以相同的顺序将 id 粘贴到 IN() 子句和 FIELD() 函数中,这将完全按照您想要的方式进行。

关于mysql - 按 SQL IN() 子句中值的顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54137697/

相关文章:

MySQL 按时间戳和枚举排序

sql - 是否可以根据条件以两种不同的方式对 SELECT 查询的结果进行排序?

mysql - 为什么 Mysql 数据截断 VARCHAR 字段的错误

mysql - 查询 Monetdb 中的两个数据库

MySQL 错误 1193 (HY00) : Uknown System variable 'loopCnt'

c# - 通配符搜索 LINQ

android - 不区分大小写字母顺序的 SQLite 查询

来自存储过程的php PDO结果为空

php - 回显用户喜欢的类别的分层MySQL表

sql - 类似于 TOP 10 的查询来选择中间记录?