1

假设我有一个产品表、用户表以及用户制作的产品的“喜欢”表。像这样的东西:

create table likes (
user_id int unsigned not null,
product_id int unsigned not null,
rating set('like','dislike') not null,
primary key (user_id, product_id)
);

在特定产品的页面上,我想查询“likes”表以找到一些其他产品也被喜欢该特定产品的用户“喜欢”。这个查询会是什么样子?

4

2 回答 2

3

您可以使用以下查询来查找同样喜欢的用户最喜欢的产品product_id=x

select L2.product_id, count(L2.user_id) as num_users from likes L1
join likes L2
where L1.product_id=x and L1.rating='like'
and L2.user_id = L1.user_id
group by L2.product_id
order by num_users desc;
于 2013-10-13T04:43:58.700 回答
1

或者您可以使用内部查询来执行此操作

select l.product_id, count(u.user_id) as like_number
from (select user_id from likes where product_id=<product_id> and rating="like") as u
inner join likes as l on u.user_id=l.user_id
where l.rating="like"
group by l.product_id
having count(u.user_id) > <number>
order by like_number

拥有子句意味着只有超过一定数量的用户喜欢的产品才能被推荐

于 2013-10-13T05:35:08.573 回答