Html 从喜欢mysql中特定产品的人那里找到最喜欢的产品
我想知道如何通过下表模式从喜欢H135产品的用户那里找到最喜欢的产品:Html 从喜欢mysql中特定产品的人那里找到最喜欢的产品,html,mysql,sql,database,Html,Mysql,Sql,Database,我想知道如何通过下表模式从喜欢H135产品的用户那里找到最喜欢的产品: CREATE TABLE likes (`user_id` int,`product_id`int) ; INSERT INTO likes (`user_id`,`product_id`) VALUES (1,22), (1,44), (2,33), (2,44), (3,22), (3,55), (4,44), (4,11), (5
CREATE TABLE likes
(`user_id` int,`product_id`int)
;
INSERT INTO likes
(`user_id`,`product_id`)
VALUES
(1,22),
(1,44),
(2,33),
(2,44),
(3,22),
(3,55),
(4,44),
(4,11),
(5,22),
(5,44),
(5,33)
;
CREATE TABLE products
(`product_id` int,`product_name`varchar(30))
;
INSERT INTO products
(`product_id`,`product_name`)
VALUES
(11,'N570'),
(22,'KA89'),
(33,'A321'),
(44,'H135'),
(55,'C839')
;
预期的输出应该是这样的
Liked_product users_who_like_it_also_like Result
H135 KA89 3
我尝试过自联接,但没有产生任何结果:
SELECT p.product_name,p2.product_name AS other_liked_products,
COUNT(l2.product_id) AS users_who_like_it_also_like
FROM likes l
INNER JOIN products p ON p.product_id = l.product_id
INNER JOIN likes l2 ON l.product_id = l2.product_id
INNER JOIN products p2 ON p2.product_id = l2.product_id
WHERE l.product_id = 44
AND l2.product_id <> 44
GROUP BY l.product_id
LIMIT 1
如果您不在乎领带,您可以使用:
select 'H135' as liked_product,
p.product_name as users_who_like_it_also_like,
count(*) as result
from likes l
join products p
on p.product_id = l.product_id
where exists (select 1
from likes x
where x.user_id = l.user_id
and x.product_id = 44)
and l.product_id <> 44
group by p.product_name
order by 3 desc
limit 1
小提琴:
在您的示例数据中,KA89的实际计数为2,并且与A321绑定
这将在一行上的聚合列表中显示两者,并与计数2绑定:
select liked_product,
group_concat(users_who_like_it_also_like) as users_who_like_it_also_like,
result
from (select 'H135' as liked_product,
p.product_name as users_who_like_it_also_like,
count(*) as result
from likes l
join products p
on p.product_id = l.product_id
where exists (select 1
from likes x
where x.user_id = l.user_id
and x.product_id = 44)
and l.product_id <> 44
group by p.product_name) x
group by liked_product, result
order by result desc limit 1
Fiddle:您可能只需要在group by之后使用order by语句。