2013-05-28 34 views
1

通过用组定制次序当我Mysql的通过

SELECT * FROM table_A WHERE id = 2321 order by color asc, color = 49, color = 2; 

这将返回所有这些颜色= 2,则颜色= 49,那么所有其他颜色。

但我的结果只需要组,然后我

SELECT * FROM table_A WHERE id = 2321 GROUP BY color ORDER BY color asc, color = 49, color = 2; 

它会通过结果返回组,但有不顾秩序

我的问题是如何回报颜色从2开始,然后49,然后其他和组'颜色'?

回答

2

GROUP BY在这里不需要。所有你需要的是使用FIELD()

ORDER BY FIELD(color, 49, 2) DESC 

这将Color = 2第一列表进行排序,然后49然后其他颜色。

+0

如果这不起作用,请与您的期望的结果添加一些记录, –

+0

这将输出所有项目的颜色= 2和后续的,但我需要组“颜色” – Peter

+0

顺便说一句,如果我在你的答案中包含GROUP BY,那么它的工作原理!所以我会接受你的回答 – Peter

0

如果你关心颜色的其余部分的顺序,你可以使用CASE

SELECT color 
    FROM table_A 
WHERE id = 2321 
GROUP BY color 
ORDER BY CASE color 
      WHEN 2 THEN 1 
      WHEN 49 THEN 2 
      ELSE color + 50 
      END 

这将排序2第一,49秒,然后其他颜色下令ASC。 这是假设颜色总是正面int

SQLFiddle