MySQL使用if语句按2列排序

时间:2012-08-26 11:32:54

标签: mysql if-statement

我在按2列排序搜索结果时遇到问题。

我有以下格式的表格

id  pos date
------------------
65  0   2012-08-10
66  0   2012-08-09
70  0   2012-08-08
73  0   2012-08-07
74  0   2012-08-06
75  0   2012-08-05
76  1   2012-08-04
77  2   2012-08-03
78  0   2012-08-02
79  0   2012-08-01

我的问题是,系统(cms)为 NULL 生成(int)0。所以我得不到结果,我需要。

我想按pos(如果不是(int)0而不是日期)进行排序,这样只有当> = 1 时,pos才会强制该位置 我的问题。有没有办法在ORDER子句中使用IF语句?

1 个答案:

答案 0 :(得分:4)

根据pos进行排序,当且仅当它已设置时,并保留按日期排序的所有零; 4E9 只是一个足够大的数字,大于pos中的所有值。

SELECT * FROM MyTable 
ORDER BY CASE pos WHEN 0 THEN 4E9 ELSE pos END, `date`;

演示at SQLfiddle

另一个更简单的mysql特定版本摆脱了“魔术常量”就是这个;

SELECT * FROM MyTable 
ORDER BY pos=0, pos, `date`;

另一个SQLfiddle