每个用户都可以添加自定义权重的点赞。
“我喜欢香蕉(7/10)和苹果(10/10)”
我想根据其他用户的喜好建议用户喜欢。
“您喜欢香蕉。您也可能喜欢苹果。”
SQL表具有以下结构:
# users
- id
- ...
# likes
- id
- label (e.g. "apple")
- ...
# user_likes
- id
- user_id
- like_id
- weight
所需的输出:
# 1. Suggestions for user ("You probably like apples!")
| like_id | relevance |
-----------------------
| 5 | 0.5 |
# 2. Suggestions for like ("Apples fit to bananas!")
| like_id | relevance |
-----------------------
| 5 | 0.8 |
我当前的想法是用PHP循环所有记录,但这不对。
是否有最佳实践或算法?有想法吗?
谢谢!
重要:我找到了this和其他示例/重复项来实现我所需要的。我可能将此问题检测为重复问题,但是我对最新最佳做法感兴趣。许多解决方案已有10年的历史了。
答案 0 :(得分:1)
此查询将查找其他用户的所有喜欢,这些其他用户与给定用户共享一个或多个喜欢。然后,它将选择这些用户的平均点赞权重,以确定每个点赞的相关性。
SELECT
l.*, AVG(ul_3.weight) AS weight
FROM
user_likes ul_1
INNER JOIN user_likes ul_2
ON ul_1.like_id = ul_2.like_id
AND ul_1.user_id <> ul_2.user_id
INNER JOIN user_likes ul_3
ON ul_2.user_id = ul_3.user_id
INNER JOIN likes l
ON l.id = ul_3.like_id
WHERE
ul_1.user_id = 5
AND l.id <> ul_1.like_id
GROUP BY
l.id
ORDER BY
weight DESC;
使用示例数据工作的SQL提琴-http://sqlfiddle.com/#!9/866825/2