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
现在,如果有人使用music
m_id = 1
然后输出可能就像
m_id
5
2
4
稍微解释一下......
m_id = 1
喜欢users -> {1,3,4}
,likes ->{2,4,5}
依次为m_id=5
音乐。由于m_id = 2
被最多用户所喜欢,首先是m_id = 4
和m_id = 1
。
我的尝试
我查询了喜欢SELECT u_id FROM likes WHERE m_id =1
Association Rules
然后我存储在一个数组中,并选择他们喜欢的每一个 按照伯爵的顺序安排他们。
但这是一个非常缓慢而漫长的过程,有什么方法可以做到这一点吗?
p.s 我听说Bayesian theorem
和Net::HTTP.post_form(uri, 'promotion_name' => 'bulletin', 'subject' => 'Your Daily Bulletin Update', 'from' => 'noreply@matsu- namibiaflood.opensciencedatacloud.org/', 'list_name' => 'bulletin')
可以是用户来实现此目的。但任何人都可以帮我解决一个例子吗?
答案 0 :(得分:1)
您可以JOIN
返回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
来过滤更多内容。
答案 1 :(得分:0)
使用子查询...
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
或者有多少&#34; alsolikes&#34;你想要显示