将行动分组以提供建议

时间:2012-03-15 19:55:59

标签: mysql

我正在尝试根据用户的收藏提供艺术家建议。

我们的表格如下:

  

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的所有收藏并相应地分组?

3 个答案:

答案 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;