MySql: order为0时随机排序,但之前使用数字

MySql: Order randomly when order is 0, but use numbers before

我有这个table

我想检索所有数据,但要按特定顺序检索。我希望它按字段顺序排序,但 0 表示随机且在该字段中的实际数字已排序之后。 所以如果我这样做:

var sqlString = "SELECT * \
FROM 10561_13581_tblOffers \
WHERE isVisible = 1 \
LIMIT " + start + "," + count

我希望结果是:

"bücher oder so" - 订单 1 “frau mit haar”——订单 3 “斯坦” - 订单 0 “ordermy”-订单 0

或者最后两个颠倒,因为它们应该是随机排序的

"bücher oder so" - 订单 1 “frau mit haar”——订单 3 “ordermy”-订单 0 “斯坦”-订单 0

但在这两种情况下,顺序 1 和 3 都是有序的。

我如何进行查询才能获得所需的结果? (ofc,这可以用更多的订单号和更多的行来完成,订单为 0)

您可以使用

ORDER BY CASE 
  WHEN order = 0 THEN 99999999
  ELSE order END

就像 0 没有特定顺序地出现在最后。

布尔表达式 order = 0 对于 true 的计算结果为 1 或对于 false 的计算结果为 0 并且可以在 ORDER BY 中使用子句:

SELECT * 
FROM 10561_13581_tblOffers 
WHERE isVisible = 1
ORDER BY `order` = 0, --this will send all 0s at the end of the resultset
         `order`

如果您确实希望所有 0 随机排序,您可以添加 RAND() 函数:

ORDER BY `order` = 0, 
         `order`,
         RAND()