我有一个列名为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解决方案的指针?
这是一个工作的sqlfiddle:
SELECT *
FROM t
ORDER BY
(CASE WHEN id = 0 THEN 999999999 ELSE id END) ASC,
(SELECT RAND()) ASC
ORDER BY
中的SELECT
很重要。如果没有它,RAND()
函数将只被调用一次,并且它不会洗牌。
这个对你有用吗
SELECT `order`
FROM table
ORDER BY CASE WHEN `order` = 0 THEN 1 ELSE 0 END, `order`
尝试:
SELECT order,
CASE
WHEN order=0 THEN 9999999
ELSE order
END AS ordermeby
FROM table
ORDER BY ordermeby;