我正在尝试根据用户的收藏提供艺术家建议。
我们的表格如下:
user_id | artist_id
1 | 4
2 | 4
1 | 3
4 | 4
6 | 2
6 | 3
4 | 3
2 | 3
因此,如果随机用户正在查看artist_id 3,则代码应该在数据库中查询已收藏artist_id 3的其他用户,并找到他们之间最常见的艺术家链接
在这种情况下,artist_id 3被用户1,3,4,6 ...和那些用户所青睐,应该挑选出常见的artist_id 4(因为它看起来最多)。
那我该如何有效地做到这一点?
我会做几个查询吗?首先要抓住所有拥有artist_id 3的user_ids,然后抓取所有user_ids的所有收藏并相应地分组?
答案 0 :(得分:2)
SELECT t2.artist_id
FROM tbl t1
INNER JOIN tbl t2
ON t1.user_id = t2.user_id
AND t1.artist_id <> t2.artist_id
WHERE t1.artist_id = 3
GROUP BY t2.artist_id
ORDER BY COUNT(*) DESC;
答案 1 :(得分:1)
SELECT *
FROM TABLE A,
(
SELECT artist_id,user_id
FROM TABLE
WHERE artist_id=3
GROUP BY artist_id,user_id
) B
WHERE A.user_id=3 AND
A.user_id = B.artist_id;
答案 2 :(得分:0)
我离MySQL专家很远,但类似的东西可能有用。但是对于mysql子选择来说它很棘手 - 当应用于大数据量时,它们往往会做出疯狂的事情。
SELECT artist_id FROM `table` WHERE
user_id IN (select user_id from `table` where artist_id = 3)
and artist_id != 3
group by artist_id
order by count(artist_id) desc
limit 1;