sql:如何根据其他用户的喜好来推荐具有相关性的喜好?

qhhrdooz  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(311)

每个用户都可以添加自己喜欢的自定义权重。
“我喜欢香蕉(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循环所有的记录,但这是不对的。
有什么最佳实践或算法吗?你知道吗?
提前谢谢!
重要提示:我找到了这个和其他的例子/副本来实现我的需要。这个问题可能会被我发现是重复的,但我对最新的最佳实践感兴趣。许多解决方案都有10年的历史。

7lrncoxx

7lrncoxx1#

此查询将查找与给定用户共享一个或多个共同喜好的其他用户的所有喜好。然后,它将选择这些用户的平均like权重,以确定每个like的相关性。

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

相关问题