&引用;喜欢这个的人也喜欢;Mysql-PHP中的查询
&引用;喜欢这个的人也喜欢;Mysql-PHP中的查询,php,mysql,sql,associations,bayesian,Php,Mysql,Sql,Associations,Bayesian,音乐表 id | title 1 Rap God 2 Blank Space 3 Bad Blood 4 Speedom 5 Hit 'em up u_id | m_id 1 1 1 2 1 4 1 5 2 3 2 4 2 5 3 1 3 5 4 1 4 2 4 5 Like表 id | title 1 Rap God 2 Bla
音乐表
id | title
1 Rap God
2 Blank Space
3 Bad Blood
4 Speedom
5 Hit 'em up
u_id | m_id
1 1
1 2
1 4
1 5
2 3
2 4
2 5
3 1
3 5
4 1
4 2
4 5
Like表
id | title
1 Rap God
2 Blank Space
3 Bad Blood
4 Speedom
5 Hit 'em up
u_id | m_id
1 1
1 2
1 4
1 5
2 3
2 4
2 5
3 1
3 5
4 1
4 2
4 5
现在如果有人以m_id=1
那么输出可能是
m_id
5
2
4
解释一下…
由于m_id=1
受到users->{1,3,4}
的喜爱,而又喜欢->{2,4,5}
音乐。由于m_id=5
受到最多用户的喜爱,因此它的第一个用户是m_id=2
和m_id=4
我的尝试
- 我询问了喜欢
m_id=1
从m\u id=1的likes中选择u\u id
- 然后我将其存储在一个数组中,并选择了它们各自喜欢的和 按计数顺序排列
p.s我听说了
关联规则
,贝叶斯定理
可以由用户来实现。但是有人能帮我举个例子吗?你可以加入回到Like
表,然后做类似的事情
SELECT also_like.m_id, COUNT(also_like.m_id)
FROM [like] AS did_like
JOIN [like] AS also_like ON
also_like.u_id = did_like.u_id
AND also_like.m_id != did_like.m_id
WHERE did_like.m_id = 1
GROUP BY also_like.m_id
ORDER BY COUNT(also_like.m_id)
本质上,您得到的是喜欢某个项目的用户列表,然后得到这些用户喜欢的完整列表,不包括他们刚刚喜欢的项目
然后,您可以添加一个HAVING
子句或LIMIT
来进一步过滤内容 使用子查询
SELECT m_id, count(u_id) as Rank FROM `like`
WHERE u_id in
(
SELECT u_id
FROM `like`
WHERE m_id = 1
)
AND m_id <> 1
GROUP BY m_id
ORDER BY Rank DESC
或者要显示多少个“alsolikes”该查询工作得出奇地好。我为10k个用户和10k个项目填充了like
表,其中包含30k行,结果或多或少是即时的。在SELECT和ORDER子句中添加一个COUNT(*)
,也可能有助于排名。