ORDER BY:无法合并两个列条件`order`和id DESC

时间:2015-01-11 15:04:30

标签: mysql

有一个表格如下:

id |  image    | order
1  |  foo.jpg  | 0
2  |  bar.jpg  | 0
3  |  test.jpg | 0

如您所见,所有行都有order 0
调用这样的查询时:

SELECT * FROM table ORDER BY order

我希望结果集按最后一个ID排序,以防所有订单都为0。

所以我试图追加另一个列条件id并通过DESC订购(这是我想到的第一件事)

SELECT * FROM table ORDER BY order, id DESC

但不,它仍然会给出错误的结果,即它随机排序。

我想要的是这样的结果集:

id |  image    | order
3  |  foo.jpg  | 0
2  |  bar.jpg  | 0
1  |  test.jpg | 0

但是如果至少有一行的订单可能大于0,那么它应该考虑到它。

有没有办法解决这个问题?无法在任何地方找到解决方案。

4 个答案:

答案 0 :(得分:2)

ORDER BY `order`,
CASE WHEN `order`=0 THEN id END DESC

答案 1 :(得分:2)

我认为这会做你想要的:

order by `order` desc, id desc

或者,如果您只想让0 order最后一次:

order by (`order = 0) ASC, `order` ASC, id desc

这会将0放在最后,否则按order按升序排序(或者如果你想降序,我们desc),然后命令具有相同值{{}的行1}}使用order

答案 2 :(得分:1)

可能是最短的:

ORDER BY if(`order`=0, id, `order`)

答案 3 :(得分:0)

首先,每当您在列/表名称中使用关键字时,请使用它周围的反引号。

其次,要回答您的主要问题 - 当您在sql语句中按部分订购时,您希望按优先级排序。

SELECT * FROM table ORDER BY id DESC, `order`