【发布时间】:2010-11-30 06:10:10
【问题描述】:
我使用了一个 mysql 查询,其中有 "where id in ("22,20,21") " 但是当我得到结果时,它的类似数组按升序排列,即 20,21,20
但我需要它的顺序与我给出子句的顺序相同
【问题讨论】:
-
我同意@deceze 的说法,即它是重复的。没有看到你的答案,或者可能会把他指向那个方向。
我使用了一个 mysql 查询,其中有 "where id in ("22,20,21") " 但是当我得到结果时,它的类似数组按升序排列,即 20,21,20
但我需要它的顺序与我给出子句的顺序相同
【问题讨论】:
我 认为你应该可以像这样使用 FIELD 关键字:
SELECT * FROM table
WHERE id in (22,20,21)
ORDER BY FIELD(id,22,20,21);
这是特定于 mysql 的,看起来很神奇,但它确实有效。
【讨论】:
id,并返回一个数字。所以如果 id=22,FIELD(...) 返回 0,如果 id=20,则返回 1。
除非给出明确的顺序,否则 SQL 结果是无序的;订单不会从in 子句中提取。
由于 ID 既不是 ASC 也不是 DESC,你必须ORDER BY 别的东西; 22、20、21的顺序你是怎么确定的?
【讨论】:
如前所述...WHERE 子句对结果集的排序没有任何作用。在ORDER BY 子句中使用MySQL built-in FIELD function 来指定结果集的排序方式:
... WHERE id IN (22, 20, 21) ORDER BY FIELD(id, 22, 20, 21) ...
【讨论】:
您不能指定将在WHERE 子句中返回的订单结果。如果要指定顺序,则需要在查询中添加 ORDER BY 子句。有关使用 FIND_IN_SET 的解决方案,请参阅 this answer。
【讨论】:
一般来说,数据库系统会以任何感觉的顺序返回结果。如果你想订购它,你必须告诉它。 This blog post 提供了一种方法;您也许可以在网上找到其他解决方案。
【讨论】: