获取维持ID传递顺序的行

时间:2011-07-19 19:07:43

标签: mysql

我有这个条款:

SELECT *
  FROM picture p
 WHERE p.id IN (2, 1, 3)

当我执行它时,我得到3个元素,但是以'id'(1,2,3)排序。

我想要的是根据我给出的顺序获取元素:2,1,3

3 个答案:

答案 0 :(得分:3)

  

当我执行它时,我得到3个元素,但是以'id'命令   (1,2,3)。

不是真的。你基本上得到一个任意的订单。没有ORDER BY条款意味着没有可靠的订单。

如果要动态构建SQL,则必须执行以下操作:

SELECT *
FROM picture p
WHERE p.id IN (2, 1, 3)
ORDER BY CASE p.id
    WHEN 2 THEN 1
    WHEN 1 THEN 2
    WHEN 3 THEN 3
END

答案 1 :(得分:1)

CASE外,您还可以使用 FIELD() 功能:

SELECT   *
  FROM   picture p
 WHERE   p.id IN (2, 1, 3)
ORDER BY FIELD(p.id, 2, 1, 3)

答案 2 :(得分:0)

SELECT     *
FROM         picture p
WHERE
p.id = 2

UNION
SELECT     *
FROM         picture p
WHERE
p.id = 1

UNION
SELECT     *
FROM         picture p
WHERE
p.id = 3

来源:Click here

请不要在SELECT语句中使用“*”这是不好的做法;尝试阅读有关数据库优化的经验法则。