2012-05-29 34 views
0

面對一個問題,並沒有得到幾小時的提示。也許onyone可以幫助我。MySQL查詢,處理活動和非活動產品

有以下查詢顯示Topsellers。所以產品的狀態(激活或不激活)保存在b.Article_Status中(0 =非激活,1 =激活)。

如何獲得目前產品系列中沒有活動產品的結果列表的產品。但是如果訂購了舊產品(並且在表order_items中)現在處於非活動狀態並且活動產品尚未訂購,那麼該產品仍將顯示。

實際查詢如下所示。已經資助了一種解決方案,該解決方案在實際活動產品已經訂購了一次後仍然有效,但仍然存在上述情況的問題。

SELECT count(a.order_itemid) AS numOrders, c.Product_ID, c.Product_Name, d.producer_name 
FROM order_items a 
LEFT OUTER JOIN product_article b ON b.Article_ID = a.order_itemid 
LEFT OUTER JOIN product c ON b.Article_Productid = c.Product_ID 
LEFT OUTER JOIN producer d ON c.Product_Producer = d.producer_id 
GROUP BY c.Product_ID 
ORDER BY `numOrders` DESC 
+0

如何productfamilies定義? – eggyal

+0

您是指產品類別?或者文章和產品表格的佈局? – MNR

+1

你在你的問題中說「productfamily」;我不確定那是什麼。 – eggyal

回答

0

解決方案是一個WHERE EXISTS子查詢

SELECT count(a.order_itemid) AS numOrders, c.Product_ID, c.Product_Name, d.producer_name 
FROM order_items a 
LEFT OUTER JOIN product_article b ON b.Article_ID = a.order_itemid 
LEFT OUTER JOIN product c ON b.Article_Productid = c.Product_ID 
LEFT OUTER JOIN producer d ON c.Product_Producer = d.producer_id 
WHERE EXISTS (SELECT * FROM product_article x WHERE c.Product_ID = x.Article_Productid AND x.Article_Status = 1) 
GROUP BY c.Product_ID 
ORDER BY `numOrders` DESC 
LIMIT 5