我在按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语句?
答案 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。