两个用户普遍喜欢的帖子

Commonly liked posts by two users

给定以下简化模型:

  1. User(id, nickname, created_at)
  2. Post(id, user_id, image, text, created_at) ## A post belongs to a user
  3. 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 和以下场景:

  1. user1 喜欢 (like_type: 1) post2、post3,然后是 post1
  2. 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] 中只能有 一个 条目=].