2012-11-26 99 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)