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

dudu 阅读:6 2023-05-25 15:08:15 评论:0

我想知道是否存在(可能是更好的方法)按 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 放入一个带有自动递增字段的临时表中,然后将其加入到第二个查询中。

还有更好的选择吗?

注意:由于第一个查询是“由用户”运行的,而第二个查询是在后台进程中运行的,因此无法使用子查询将二合一查询组合在一起。 p>

我正在使用 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() 函数中,这将完全符合您的要求。


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

全民解析

全民解析

关注我们