如何将结果最后以0排序

时间:2019-02-17 10:27:42

标签: php mysql sorting

我有一个带有价格的产品清单。有些产品的价格仅应要求提供。该产品在数据库中的价格为0。
如果我现在发出这样的请求:

$sql = "SELECT * FROM products WHERE ORDER BY Price ASC";

结果当然是从0开始的。
但是我希望所有0价格都在结果的结尾。
SQL请求是否有可能?在php中重新排序的最佳解决方案是什么?
Thx进阶
伯恩德

3 个答案:

答案 0 :(得分:4)

您可以使用CASE表达式进行排序,该表达式将零价格放在最后:

SELECT *
FROM products
WHERE ...
ORDER BY
    CASE WHEN Price > 0 THEN 0 ELSE 1 END,
    Price;

在MySQL中,ORDER BY子句可以简化:

SELECT *
FROM products
WHERE ...
ORDER BY
    Price = 0,    -- false (0) for positive prices, true (1) for zero prices
    Price;

答案 1 :(得分:0)

是的,您可以通过按位取反使bigint的最大值为0。

SELECT *
FROM products
ORDER BY
    CASE WHEN Price = 0 THEN ~0 ELSE Price END ASC

答案 2 :(得分:-1)

您可以使用mysql FIELD函数按所需顺序检索数据

   SELECT * FROM products WHERE ORDER BY FIELD(Price,0) ASC