我想知道是否有可能(可能是更好的方法)按 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()功能:
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
IN()如果您以相同的顺序将 id 粘贴到子句和FIELD()函数中,这将完全符合您的要求。
IN()