MySQL推荐一个项目。

时间:2012-11-18 14:35:47

标签: 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很陌生,但到目前为止我已经得到了,之后我真的不知道如何去做。

目前它只提供所选客户购买的物品'Lani Morgan',但我希望它能显示其他顾客购买的物品,他们购买了“Lani Morgan”购买的商品。

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 

真的很感激任何帮助,谢谢。

1 个答案:

答案 0 :(得分: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);