我想知道是否有away(可能是更好的方法)按in()子句中值的顺序排序.

问题是我有两个查询,一个获取所有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放入一个带有自动递增字段的临时表中,然后将该字段加入到第二个查询中.

有更好的 Select 吗?

Note:由于第一个查询"由用户"运行,第二个查询在后台进程中运行,因此无法使用子查询将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相关问答推荐

试图加快查询速度-没有使用索引?

使用内部连接从同一表中删除似乎失败(两条记录均已删除)

如何在Sequelize中将查询作为选项?

透视从另一个表添加信息的查询

表列中的SQL SUM MENY值记录单个查询

为什么 MAX 函数通过调用在 group 中生成正确的结果

为什么用PyMySQL构建的json返回结果会出现重复?

SQL:如何为给定组中的所有记录 Select 一列与另一列不匹配的位置

try 在 .map 中使用 Favorite 选项卡进行react .我无法更改 mysql 表上的布尔类型

谁能帮我优化低性能的mysql查询

如何在更新语句中使用多个子字符串函数?

当每组的列值发生变化时 Select 并连接行

MySQL 1292 截断不正确的日期时间值:'2020-09-11T08:32-50Z'

MySQL 中的 LATERAL 语法 - 是否只是说左表首先执行以便下一个可以引用它?

在一个 SQL 查询中对同一列中相同类型的不同值求和

MySql查询无结果

如何在sql中挑出某些名称

最好的 MySQL 性能调优工具?

你如何 OR 两个 LIKE 语句?

将 MySQL 数据库置于版本控制之下?