2012-11-18 88 views
0

我試圖運行一個查詢,選定的人,它會根據他們的購買歷史和其他人買了誰也買了這個項目的物品。MySQL推薦一個項目。

例子:

Customer 1 purchases item A, and B. 
Customer 2 purchases item B. 
Customer 2 is recommended, item A. 

我有在此使用4代表我將列出他們與相關行的名稱。

Customer 
PK: Cust_ID 

Session 
PK: Ses_ID 
FK: Cust_ID 

Order 
PK: Order_ID 
FK: ItemRef_ID 
FK: Session_ID 

Item 
PK: Item_ID 

我很新的SQL,但這是我到目前爲止,之後,我真的不知道如何去做這件事。

目前它只給出所選客戶購買的商品'拉尼摩根',但我希望它顯示其他顧客購買的物品,誰買了'拉尼摩根'購買的物品。

SELECT Item_Desc, Item_ID 
FROM rbickers.Item 

LEFT JOIN rbickers.Order 
ON Item.Item_id = Order.itemref_id 

LEFT join rbickers.Session 
ON Order.Session_id = Session.Ses_id 

left join rbickers.customer 
On customer.cust_ID = session.Cust_ID 

Where Cust_First = "Lani" and Cust_Last = "Morgan" 

GROUP BY Item_Type 

LIMIT 10 

任何幫助真的不勝感激,謝謝。

+0

你能請詳細解釋一下',但是我希望它能顯示其他顧客購買的物品,誰買了'拉尼摩根'購買的樣品數據。 「拉尼摩根」不是您發佈的查詢中的客戶姓名嗎? –

+0

是的,這是我的例子。基本上我想要做的是類似於亞馬遜推薦項目部分,但更基本的版本。 因此,如果拉尼摩根例如買了牙刷,買了牙刷的其他人也買了一些漱口水和一塊肥皂,查詢將返回,漱口和一塊肥皂。 我明白,在現實世界中還有更多的東西(尿布和啤酒場景),但現在我只是習慣於習慣學習一種新語言,並且正在爲這一點而努力。 – Wizard

回答

1

因此,通過您的基本版本和提供的模式,我看到它實現的方式是檢查每個項目,如果不是由customer1購買,而是由customer1購買的任何其他客戶購買項目購買。 由於該模式需要你通過所有給定的表來參加,我會問你創建的連接您所提供的一種觀點:

create view CustomerItems as 
SELECT * 
FROM rbickers.Item 

LEFT JOIN rbickers.Order 
ON Item.Item_id = Order.itemref_id 

LEFT join rbickers.Session 
ON Order.Session_id = Session.Ses_id 

left join rbickers.customer 
On customer.cust_ID = session.Cust_ID 

#Where Cust_First = "Lani" and Cust_Last = "Morgan" 

然後:

select distinct item.* from item, CustomerItems cust1 where 
cust1.Cust_First="Lani" and cust1.Cust_Last="Morgan" and 
item.Item_ID not in(
select Item_ID from CustomerItems cust2 where cust1.Cust_ID=cust2.Cust_ID) 
and exists(select * from CustomerItems cust3 where 
cust3.Cust_ID<>cust1.cust_ID and item.Item_ID=cust3.Item_ID); 
+0

這對我來說很有意義,但由於在一個查詢中有多個選擇,我無法獲得閾值部分的工作。而且,它正在返回所有的項目,我認爲這是因爲門檻,但?我已經在cust1.Item_ID = cust2.Item_ID限制@threshold)上放置了3個限制。這讓我不太確定這是否是問題。 – Wizard

+0

固定。您可以使用equi-join而不是左連接。但我認爲這不應該有任何區別。 – aksci

+0

好的,我仍然遇到這個問題,它是說'未知'欄'cust2Cust_ID in'where clause'是cust2對客戶還是所有項目的引用? – Wizard