我试图提供艺术家的建议,基于我们的用户的最爱。
我们的桌子看起来像:
user_id = artist_id
1/4
2/2-4
1/3
4-4-4
6-2
6-3
4/3
2/2-3
因此,如果随机用户正在查看artist_id 3,则代码应查询数据库中是否有收藏artist_id 3的其他用户,并在它们之间找到最常见的艺术家链接。
在这种情况下,artist_id 3是用户最喜欢的1,3,4,6.在这些用户中,应该挑选出常见的artist_id 4(因为它看起来最多)。
那么,我应该如何有效地做到这一点呢?
我要问几个问题吗?首先要抓取所有的user_ids谁有artist_id 3,然后我抓取所有的最爱为这些user_ids和分组相应?
发布于 2012-03-15 20:20:12
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;
发布于 2012-03-15 20:03:16
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;
发布于 2012-03-15 20:06:06
我不是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;
https://stackoverflow.com/questions/9727199
复制相似问题