有一个表格如下:
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,那么它应该考虑到它。
有没有办法解决这个问题?无法在任何地方找到解决方案。
答案 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`