user_tags
、tags
SELECT t.name FROM user_tags ut JOIN tags t ON ut.tag_id = t.id WHERE ut.user_id = 1;
post_tags
、posts
、tags
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;
behaviors
SELECT post_id FROM behaviors WHERE user_id = 1;
post_tags
、posts
、tags
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);
最终标签推荐给用户1的内容是:Fifth Post、Ninth Post。
behaviors
SELECT post_id FROM behaviors WHERE user_id = 1;
behaviors
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;
behaviors
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);
posts
SELECT 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第二次作业。
每一步都明确了查哪个表、查什么数据,推理过程完全基于你的实际数据库内容。