我有一个列名为order
的表,我希望按order
的升序对结果进行排序。很容易。
然而,order
也可以具有零值,在我的情况下是特殊的,因为零意味着这些项以随机顺序被推到集合的后面(在有多个零值行的情况下)
也就是说:5 6 3 0 0 2 4 1 0 -> 1 2 3 4 5 6 0 0 0
每次进行查询时,最后3行都会被洗牌。我目前正在通过PHP解决这个问题,但我想知道这里的一些SQL专业人员是否可以指出MySQL解决方案?
答案 0 :(得分:2)
这对你有用吗</ p>
SELECT `order`
FROM table
ORDER BY CASE WHEN `order` = 0 THEN 1 ELSE 0 END, `order`
答案 1 :(得分:2)
这是一个有效的sqlfiddle:
SELECT *
FROM t
ORDER BY
(CASE WHEN id = 0 THEN 999999999 ELSE id END) ASC,
(SELECT RAND()) ASC
SELECT
中的ORDER BY
非常重要。如果没有它,RAND()
函数只会被调用一次而且它不会被洗牌。
答案 2 :(得分:0)
尝试:
SELECT order,
CASE
WHEN order=0 THEN 9999999
ELSE order
END AS ordermeby
FROM table
ORDER BY ordermeby;