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

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

每个用户都可以添加自己喜欢的自定义权重。
“我喜欢香蕉(7/10)和苹果(10/10)”
我想建议喜欢的用户,根据其他用户喜欢什么。
“你喜欢香蕉。你可能也喜欢苹果。”
sql表具有以下结构:

  1. # users
  2. - id
  3. - ...
  4. # likes
  5. - id
  6. - label (e.g. "apple")
  7. - ...
  8. # user_likes
  9. - id
  10. - user_id
  11. - like_id
  12. - weight

所需输出:

  1. # 1. Suggestions for user ("You probably like apples!")
  2. | like_id | relevance |
  3. -----------------------
  4. | 5 | 0.5 |
  5. # 2. Suggestions for like ("Apples fit to bananas!")
  6. | like_id | relevance |
  7. -----------------------
  8. | 5 | 0.8 |

我目前的想法是用php循环所有的记录,但这是不对的。
有什么最佳实践或算法吗?你知道吗?
提前谢谢!
重要提示:我找到了这个和其他的例子/副本来实现我的需要。这个问题可能会被我发现是重复的,但我对最新的最佳实践感兴趣。许多解决方案都有10年的历史。

7lrncoxx

7lrncoxx1#

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

  1. SELECT
  2. l.*, AVG(ul_3.weight) AS weight
  3. FROM
  4. user_likes ul_1
  5. INNER JOIN user_likes ul_2
  6. ON ul_1.like_id = ul_2.like_id
  7. AND ul_1.user_id <> ul_2.user_id
  8. INNER JOIN user_likes ul_3
  9. ON ul_2.user_id = ul_3.user_id
  10. INNER JOIN likes l
  11. ON l.id = ul_3.like_id
  12. WHERE
  13. ul_1.user_id = 5
  14. AND l.id <> ul_1.like_id
  15. GROUP BY
  16. l.id
  17. ORDER BY
  18. weight DESC;

sql处理示例数据-http://sqlfiddle.com/#!9/866825/2

展开查看全部

相关问题