2014-11-08 64 views
0

我有一個SQL問題,我希望有人可以幫助。購物籃:帶選項的產品,如何檢查組合是否存在?

在我的網站上,有人可以訂購產品,然後選擇該產品的選項,例如他們買了一輛車,還有諸如輪胎,立體聲系統等選項。客戶可以將多個項目添加到自己的籃子相同的主項目(汽車),但後來它不同的選項,如:

車,倍耐力,B &Ø 汽車,米其林,B &Ø

我有這個DB結構來實現這一目標:

orders 
---------- 
order_ref 
total 


orders_parts 
------------ 
id 
order_ref 
part_id 
quantity 


orders_parts_options 
-------------------- 
id 
option 





orders 
------ 
12345  1000.01 



orders_parts 
------------ 
1001 12345  Audi  1 
1002 12345  Audi  1 



orders_parts_options 
-------------------- 
1001 michelin 
1001 b&o 
1002 pirelli 
1002 b&o 

所以在這裏你可以看到我有兩個奧迪在我的購物籃,一個與米其林,一個與倍耐力,都爲B & o音頻系統。我的問題;假設再次打電話給該訂單添加項目到購物籃,例如,另一個與米其林和奧迪奧迪& O,我需要什麼SQL來獲得1001的orders_parts.id?

我想出了這個有點廢話的:

SELECT op.id FROM orders_parts op 
    INNER JOIN orders_parts_options opo ON (op.id = opo.id) 
WHERE op.order_ref = 12345 AND (opo.option = 'michelin' OR opo.option = 'b&o') 

,但我得到這個結果

1001 
1001 
1002 

。我猜我需要將它聚合起來,並有一個計數= 2,但只是不能解決。任何人都可以幫助我更聰明嗎?

(只是爲了增加,數據庫在現實生活中正常化,但爲了清晰起見,我只有全文文本值)。

回答

1
SELECT op.id, count(op.id) as n FROM orders_parts op 
    INNER JOIN orders_parts_options opo ON (op.id = opo.id) 
WHERE op.order_ref = 12345 AND (opo.option = 'michelin' OR opo.option = 'b&o') 
GROUP BY op.id; 

該查詢檢索所有部件(和它們的數量)爲order_ref = 12345,其中選項= '米什蘭' 或選項= 'B & O'

+0

啊哈,謝謝,只是需要加入具有n = 2,我得到了我以後的ID,因爲我只想要它有兩個指定選項的ID。 – BigMeat 2014-11-08 14:50:47

相關問題