我想知道是否有(可能是更好的方法)按 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 放入一个带有自动递增字段的临时表中,然后将该字段连接到第二个查询中。
有更好的选择吗?
Note:由于第一个查询是“由用户”运行,而第二个查询是在后台进程中运行,因此无法使用子查询将 2 条查询合并为 1 条查询。
我正在使用 MySQL,但我认为让它记下其他数据库的选项可能会很有用。
使用MySQL的FIELD() http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_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
如果您将 ids 粘贴到IN()
条款和FIELD()
以相同的顺序运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)