在Mysql查询中双顺序

时间:2015-03-11 14:39:57

标签: php mysql

我在SQL查询中订购时遇到了一些问题。

我在表'产品中有2个字段('价格'和' in_stock')。我想要做的是通过这两个字段对查询结果进行排序 - 通过' in_stock'而不是价格'。但是(!)一件重要的事情就是订购' in_stock'作为boolen。例如,表格是:

Name       | Price | in_stock |
----------------------------------|
Product1   | 100   |    9     |
Product2   | 200   |    0     |
Product3   | 500   |    4     |
Product4   | 500   |    0     |
Product5   | 300   |    2     |

所以正确的订单结果是:

Product1 - 100, 9
Product5 - 300, 2
Product3 - 500, 4
Product2 - 200, 0
Product4 - 500, 0 

第一步 - 按库存订购产品 - 如果产品缺货,则必须在列表末尾。按价格对产品进行分类 - 从最低到最高。

3 个答案:

答案 0 :(得分:1)

只需在ORDER clausule中添加两列,即可按两列排序:

ORDER BY in_stock DESC, price ASC

答案 1 :(得分:0)

您可以在order by子句中使用条件:

select name, price, in_stock
from yourtable
order by in_stock = 0, price

这将首先订购有库存的产品(无论多少),然后按价格订购。


或者您可以使用案例陈述来对结果进行排序:

order by case when in_stock > 0 then 0 else 1 end, price

答案 2 :(得分:0)

排序不只是添加2个订单子句,它需要额外的情况 - 当下面的内容达到所需的结果集时

select * from table_name 
order by case when in_stock = 0 then 1 else 0 end , price,in_stock desc ;