2013-04-25 63 views
2

我不会粘贴整个查询。它看起来像这样。MySQL按列排序= x,列asc?

SELECT *, MONTH(date_created) as month 
from table 
GROUP BY month ORDER BY month='3', month asc 

由于这是今年4月和我查询我本来期望的顺序如下3,1,2,4

相反,我走出1,2,4,3

如何更改声明的ORDER BY部分,以便按照选定月份的顺序排序结果,然后按顺序显示年份中的剩余月份?

+0

也许这:http://stackoverflow.com/questions/2175439/mysql-custom-sort – 2013-04-25 14:01:30

+0

请停止使用像这样的“GROUP BY”。这不是ANSI标准。 – Kermit 2013-04-26 02:07:49

回答

5

添加DESC

ORDER BY month = '3' DESC, month asc 

month='3'是一个布尔表达式,其返回1或0,所以基本上当结果是零,它将对结果的最后部分。

使用或不使用DESC,使用<>

ORDER BY month <> '3', month asc 
+0

是的,很好!我比较慢... – JoDev 2013-04-25 14:02:41

0

您必须添加DESCASC第一顺序:

SELECT *, MONTH(date_created) as month 
FROM table 
GROUP BY month ORDER BY month='3' DESC, month ASC 
-2

的解决方案是按字段

SELECT * FROM table 
GROUP BY month 
ORDER BY FIELD(month, 3,1,2,4)