2012-11-26 100 views
1

我需要编写一个查询来选择产品从一个搜索页面数据库,此刻的查询是非常简单的MySQL的选择查询2,其中选择

SELECT * FROM products WHERE stock > 0 ORDER BY id DESC 

该查询将从带回的产品原料微最新的,我们将很快进入销售,所以我需要更改查询以降序销售最新的产品,然后展示未下降的剩余产品。如果产品正在销售中,rrp不等于0.有没有一种方法可以在不必运行两个单独查询的情况下执行此操作?

是想类似

SELECT * FROM products WHERE stock > 0 ORDER BY (rrp != 0) DESC, id DESC 

,但不起作用。

在此先感谢

+0

“*但那不起作用*“?怎么会这样? – eggyal

回答

1

ORDER试试这个:

SELECT * 
FROM products 
WHERE stock > 0 
ORDER BY 
Case when rrp != 0 then 0 else 1 end, 
id DESC 
+0

我不能使用rrp!= 0作为我仍然需要展示出售产品后未售出的产品 – Tom

+0

@Tom:plz尝试我更新的查询 –

+1

完美谢谢 – Tom

2

您可以通过多列

SELECT * FROM products WHERE stock > 0 ORDER BY rrp DESC, id DESC 

或2个何在

SELECT * FROM products WHERE stock > 0 AND rrp != 0 ORDER id DESC 
+0

我想到了,但第一个订单由最昂贵的第一个(不是最新的产品在销售),第二个不带回售后的产品在销售 – Tom

0
SELECT * FROM products WHERE stock > 0 and rrp != 0 ORDER BY rrp DESC, id DESC 
0

您的RRP在这里是否像布尔值一样工作,以确定产品是否正在销售。

请检查下面的参考SQLFIDDLE

select * from sale 
where stock>0 
and rrp <>0 
order by stock desc, id 

ID STOCK RRP 
3 490  1 
4 200  1 
1 120  1 

好像你可能有其他意图比你这里提到的最简单的要求..

0

试试这个

 SELECT * 
       FROM products 
     WHERE stock > 0 

     CASE WHEN rrp != 0 THEN (ORDER BY rrp DESC) 
     CASE WHEN rrp= 0 THEN (ORDER BY id DESC)