按SQLIN()子句中值的顺序排序

按SQLIN()子句中值的顺序排序

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

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

所以它应该是(非常简化的):

SELECT id FROM table1 WHERE ... ORDER BY display_order, nameSELECT name, description, ... WHERE id IN ([id's from first])

问题是,第二个查询没有按照ID被放入IN()子句的顺序返回结果。

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

还有更好的选择吗?

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

我正在使用MySQL,但我认为让它注意到其他DB也有哪些选项可能是有用的。


互换的青春
浏览 1380回答 3
3回答

海绵宝宝撒

请参见如何获取排序数据。SELECT ...   FROM ...  WHERE zip IN (91709,92886,92807,...,91356)    AND user.status=1ORDER      BY provider.package_id DESC       , FIELD(zip,91709,92886,92807,...,91356)LIMIT 10

缥缈止盈

出现在人们脑海中的解决方案有两种:order by case id when 123 then 1 when 456 then 2 else null end ascorder by instr(','||id||',',',123,456,') asc(instr()来自甲骨文,也许你有locate()或charindex()或诸如此类的东西)
打开App,查看更多内容
随时随地看视频慕课网APP