user_tags、tagsSELECT t.name FROM user_tags ut JOIN tags t ON ut.tag_id = t.id WHERE ut.user_id = 1;
post_tags、posts、tagsSELECT 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;
behaviorsSELECT post_id FROM behaviors WHERE user_id = 1;
post_tags、posts、tagsSELECT 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);
最终标签推荐给用户1的内容是:Fifth Post、Ninth Post。
behaviorsSELECT post_id FROM behaviors WHERE user_id = 1;
behaviorsSELECT 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;
behaviorsSELECT 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);
postsSELECT id, title FROM posts WHERE id IN (29, 334, 336, 338, 339) AND status = 'published';
| id | title |
|---|---|
| 29 | Ninth Post |
| 334 | 测试草稿 |
| 336 | 学生证背面 |
| 338 | 论文截图1 |
| 339 | api第二次作业 |
最终协同过滤推荐给用户1的内容是:Ninth Post、测试草稿、学生证背面、论文截图1、api第二次作业。
每一步都明确了查哪个表、查什么数据,推理过程完全基于你的实际数据库内容。