我有一个带有价格的产品清单。有些产品的价格仅应要求提供。该产品在数据库中的价格为0。
如果我现在发出这样的请求:
$sql = "SELECT * FROM products WHERE ORDER BY Price ASC";
结果当然是从0开始的。
但是我希望所有0价格都在结果的结尾。
SQL请求是否有可能?在php中重新排序的最佳解决方案是什么?
Thx进阶
伯恩德
答案 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