在mysql数据集中随机播放一些结果

时间:2015-08-03 14:03:37

标签: php mysql

我有一个列名为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解决方案?

3 个答案:

答案 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;