鉴于以下简化模型:
User(id, nickname, created_at)
Post(id, user_id, image, text, created_at) ## A post belongs to a user
ViewedPost(id, user_id, post_id, like_type, created_at) ##like_type can either be -1, 0 or 1
我想根据用户1获得2个不同用户(user1和user2)通常喜欢的帖子(like_type == 1
),按created_at
排序。
以下是一个例子:
给定user1,user2,post1,post2,post3,post4以及以下场景:
常用的帖子是post1,post2,post3。由于我希望根据用户的喜欢顺序排名,因此必须是post2,post3然后是post1。
答案 0 :(得分:1)
ViewedPost
上的自我加入完成了这项工作。其余的是优化和格式化语法:
SELECT post_id
FROM ViewedPost v1
JOIN ViewedPost v2 USING (post_id, like_type)
WHERE v1.user_id = 1
AND v2.user_id = 2
AND like_type = 1
ORDER BY v1.created_at;
假设UNIQUE
ViewedPost
上的(user_id, post_id)
约束,以便同一个用户每个帖子只能有一个条目。