我正在尝试运行一个查询,对于选定的人,它将根据他们的购买历史和其他购买过该项目的人推荐项目。
示例:
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 任何帮助都会非常感谢,谢谢。
发布于 2012-11-18 23:56:29
所以根据你的基本版本和提供的模式,我看到的实现方式是检查每一件商品,如果不是由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);https://stackoverflow.com/questions/13441113
复制相似问题