“喜欢这个的人也喜欢” Mysql PHP 中的查询

" People Who Liked this Also Liked " Query in Mysql PHP

Music table

id | title
1    Rap God
2    Blank Space
3    Bad Blood
4    Speedom
5    Hit 'em up

Like table

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

访问 music

那么输出可能像

   m_id

    5
    2
    4

稍微解释一下...

因为 m_id = 1users -> {1,3,4} 喜欢,而 likes ->{2,4,5} 音乐。由于 m_id=5 被最大数量的用户喜欢,因此首先是 m_id = 2m_id = 4

我的尝试

但这是一个非常缓慢且漫长的过程,我有什么办法可以做到这一点吗?

p.s 我听说 Association RulesBayesian theorem 可以被用户实现。但是谁能帮我举个例子吗?

您可以 JOIN 返回 Like table 并执行类似的操作。

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

和可选的

LIMIT 0, 10

或者你想显示多少"alsolikes"