0

我在按 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 而不是日期)排序,因此 pos 仅在>=1 我的问题时强制该位置。有没有办法在 ORDER 子句中使用 IF 语句?

4

1 回答 1

4

根据pos当且仅当它被设置时排序,并将所有零保留为最后一次按日期排序;4E9只是一个足够高的数字,足以大于 中的所有值pos

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

SQLfiddle 上的演示。

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

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

另一个SQLfiddle

于 2012-08-26T11:41:52.887 回答