在MYSQL中,我有一个用户表,一个项目表和一个投票表,投票表具有用户给予项目的投票。并非每个用户都对所有项目进行了投票,投票可以是1或-1。
鉴于用户,是否可以按投票的相似性对用户进行排序?
User Table Item Table Vote Table
Id | Username Id | Item Id | UserId | ItemId | Vote
------------- ------------ ---------------------------
1 | Tom 1 | Apple 1 | 1 | 1 | -1
2 | Jenny 2 | Orange 2 | 1 | 2 | 1
3 | Jim 3 | Grape 3 | 1 | 4 | 1
4 | Lemon
4 | 2 | 2 | 1 (Jenny voted the same as Tom)
5 | 2 | 4 | -1
6 | 3 | 1 | -1 (Jim voted the same as Tom)
7 | 3 | 2 | -1
8 | 3 | 4 | 1 (Jim voted the same as Tom)
在这种情况下,给定用户ID 1(Tom),用户ID 3(Jim)更像Tom,因为他们在itemid 1(Apple)和itemid 4(Lemon)上投票两次。用户ID 2(Jenny)不那么相似,因为他们只对itemid 2(橙色)投了一次。
换句话说,吉姆与汤姆更相似,因为他与汤姆的投票方式与汤姆的投票方式相同,而詹姆则不那么相似,因为她在一件商品上的投票方式与汤姆相同。
答案 0 :(得分:0)
我想我找到了一个解决方案:
SELECT all_users.userId, all_users.itemId, COUNT(user.userId) AS total_matches
FROM votes AS user
JOIN votes AS all_users
ON all_users.vote = user.vote
AND all_users.itemId = user.itemId
AND all_users.userId != user.userId
AND user.userId = 1
GROUP BY all_users.userId
ORDER BY total_matches DESC