两个用户普遍喜欢的帖子
Commonly liked posts by two users
给定以下简化模型:
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
我想获得 2 个不同用户(user1 和 user2)普遍喜欢的帖子 (like_type == 1
),根据 user1 按 created_at
排序。
这是一个例子:
给定 user1、user2、post1、post2、post3、post4 和以下场景:
- user1 喜欢 (like_type: 1) post2、post3,然后是 post1
- user2 喜欢 (like_type: 1) post4、post1、post2,然后是 post3
最常被点赞的帖子是post1、post2、post3。由于我希望根据 user1 的点赞顺序对其进行排名,因此必须是 post2、post3 然后是 post1。
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;
假设 ViewedPost
对 (user_id, post_id)
的 UNIQUE
约束,因此同一用户在每个 [=21] 中只能有 一个 条目=].
给定以下简化模型:
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
我想获得 2 个不同用户(user1 和 user2)普遍喜欢的帖子 (like_type == 1
),根据 user1 按 created_at
排序。
这是一个例子:
给定 user1、user2、post1、post2、post3、post4 和以下场景:
- user1 喜欢 (like_type: 1) post2、post3,然后是 post1
- user2 喜欢 (like_type: 1) post4、post1、post2,然后是 post3
最常被点赞的帖子是post1、post2、post3。由于我希望根据 user1 的点赞顺序对其进行排名,因此必须是 post2、post3 然后是 post1。
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;
假设 ViewedPost
对 (user_id, post_id)
的 UNIQUE
约束,因此同一用户在每个 [=21] 中只能有 一个 条目=].