我使用了一个mysql查询,其中有“where in in(”22,20,21“)” 但是当我得到结果时,它的数组按照先前的顺序排列,即20,21,20
但我需要的顺序与我给出的条款相同
答案 0 :(得分:18)
我认为你应该能够像这样使用FIELD关键字:
SELECT * FROM table
WHERE id in (22,20,21)
ORDER BY FIELD(id,22,20,21);
这是特定于mysql的,看起来很神奇,但它确实有效。
答案 1 :(得分:2)
除非给出明确的排序,否则SQL结果是无序的;订单不会从in
条款中获取。
由于ID既不是ASC也不是DESC,你必须ORDER BY
别的东西;你怎么首先确定22,20,21订单?
答案 2 :(得分:2)
如前所述...... WHERE
子句对结果集的排序没有任何作用。在ORDER BY
子句中使用MySQL built-in FIELD
function指定应如何排序结果集:
... WHERE id IN (22, 20, 21) ORDER BY FIELD(id, 22, 20, 21) ...
答案 3 :(得分:0)
您无法指定将在WHERE
子句中返回的订单结果。如果要指定顺序,则需要在查询中添加ORDER BY
子句。对于使用FIND_IN_SET
的解决方案,请参阅this answer。
答案 4 :(得分:0)
通常,数据库系统会以任何顺序返回结果。如果您想订购它,您必须告诉它。 This blog post提供了一种方法;您可以在线找到其他解决方案。