推荐算法推理过程(基于实际数据库数据)

一、标签推荐算法

步骤1:查用户兴趣标签

  • 查表:user_tagstags
  • SQL:
    SELECT t.name
    FROM user_tags ut
    JOIN tags t ON ut.tag_id = t.id
    WHERE ut.user_id = 1;
    
  • 结果:用户1的兴趣标签为“科幻”“动画”“美食”“旅行”“穿搭”

步骤2:查这些标签下的所有帖子

  • 查表:post_tagspoststags
  • SQL:
    SELECT p.id, p.title
    FROM post_tags pt
    JOIN posts p ON pt.post_id = p.id
    JOIN tags t ON pt.tag_id = t.id
    WHERE t.name IN ('科幻', '动画', '美食', '旅行', '穿搭')
      AND p.status = 'published'
      AND p.user_id <> 1;
    
  • 结果:id=3(功夫熊猫)、id=25(Fifth Post)、id=29(Ninth Post)

步骤3:查用户已互动过的帖子

  • 查表:behaviors
  • SQL:
    SELECT post_id FROM behaviors WHERE user_id = 1;
    
  • 结果:1、2、3、21

步骤4:排除已看过的内容,得到最终推荐

  • 查表:post_tagspoststags
  • SQL:
    SELECT DISTINCT p.id, p.title
    FROM post_tags pt
    JOIN posts p ON pt.post_id = p.id
    JOIN tags t ON pt.tag_id = t.id
    WHERE t.name IN ('科幻', '动画', '美食', '旅行', '穿搭')
      AND p.status = 'published'
      AND p.user_id <> 1
      AND p.id NOT IN (1, 2, 3, 21);
    
  • 结果:id=25(Fifth Post)、id=29(Ninth Post)

结论

最终标签推荐给用户1的内容是:Fifth Post、Ninth Post。


二、协同过滤推荐算法

步骤1:查用户1有行为的帖子

  • 查表:behaviors
  • SQL:
    SELECT post_id FROM behaviors WHERE user_id = 1;
    
  • 结果:1、2、3、21

步骤2:查和用户1有重叠行为的其他用户

  • 查表:behaviors
  • SQL:
    SELECT DISTINCT b2.user_id, b2.post_id
    FROM behaviors b1
    JOIN behaviors b2 ON b1.post_id = b2.post_id
    WHERE b1.user_id = 1 AND b2.user_id <> 1;
    
  • 结果:用户2、3、4、5、33、36、38、39、43等

步骤3:查这些相似用户还看过但用户1没看过的帖子

  • 查表:behaviors
  • SQL:
    SELECT DISTINCT post_id
    FROM behaviors
    WHERE user_id IN (2, 3, 4, 5, 33, 36, 38, 39, 43)
      AND post_id NOT IN (1, 2, 3, 21);
    
  • 结果:29、334、336、338、339

步骤4:查这些帖子的详情

  • 查表:posts
  • SQL:
    SELECT id, title
    FROM posts
    WHERE id IN (29, 334, 336, 338, 339)
      AND status = 'published';
    
  • 结果:
idtitle
29Ninth Post
334测试草稿
336学生证背面
338论文截图1
339api第二次作业

结论

最终协同过滤推荐给用户1的内容是:Ninth Post、测试草稿、学生证背面、论文截图1、api第二次作业。


总结

  • 标签推荐算法推荐给用户1的内容是:Fifth Post、Ninth Post
  • 协同过滤推荐算法推荐给用户1的内容是:Ninth Post、测试草稿、学生证背面、论文截图1、api第二次作业

每一步都明确了查哪个表、查什么数据,推理过程完全基于你的实际数据库内容。