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
Now if someone visits music
with m_id = 1
Then the output might be like
m_id
5
2
4
To explain this a bit...
As m_id = 1
is liked by users -> {1,3,4}
which in turn likes ->{2,4,5}
musics. Since m_id=5
is liked by max number of users its first followed by m_id = 2
and m_id = 4
.
My Try
I queried the users who liked
m_id = 1
SELECT u_id FROM likes WHERE m_id =1
Then i stored in in an array and selected each of their likes and arranged them in desc order of count.
But it is a very slow and long process is there any way i can do this ?
p.s I have heard of Association Rules
and Bayesian theorem
can be user to achieve this. But can anyone help me out with an example ?
You can
JOIN
back on theLike
table and do something like this.Essentially you are getting a list of users who liked an item then getting a complete list of those user's likes excluding the item they just liked.
You can then add a
HAVING
clause orLIMIT
to filter things down a bit more.