0

我为此设置了一个典型的 MySQL 数据库:发布表、用户表、评论表。

查询诸如“获取自上次评论以来有新评论的我评论的帖子”之类的最佳方法是什么?我无法确定如何将大于我的comment_timestamp 条件的其他用户comment_timestamp 合并到以下查询中:

我大致有

SELECT * FROM posts 
WHERE posts.id IN 
( SELECT DISTINCT posts.id FROM posts,users,comments WHERE comments.post_id = post.id AND comments.user_id = $current_user_id ) AND .. something to filter only comments where timestamp is greater than mine

我意识到我可以遍历一组并在 MySQL 之外进行过滤,但如果可能的话,我更愿意在 MySQL 中完成所有操作。我知道通过加入可能有更好的方法,但我不知道如何在加入的两个部分中移动“我的”最后评论的comment_timestamp

user table
-----
id

posts table
------
id
user_id

comments table
-------
id
user_id
post_id
comment_timestamp
4

1 回答 1

1
SELECT DISTINCT p.*
FROM posts p
INNER JOIN comments c
ON c.post_id = p.id
WHERE c.comment_timestamp > (
   SELECT MAX(c2.comment_timestamp)
   FROM comments c2
   WHERE c2.post_id = c.post_id
   AND c2.user_id = $current_user_id
) 

为每个帖子选择帖子数据,这些帖子包含由不同用户创建的评论,其时间戳值大于当前用户最近发表的评论。包含 Distinct 以仅获取每个帖子一次,因为帖子可能在当前用户的最新评论之后有多个评论。

SQL小提琴。fiddle 假设当前用户的 ID 为 100,并提供以下示例案例:

  • 最近评论是当前用户和其他用户之前评论过的帖子
  • 当前用户发表评论且其他用户随后发表评论的帖子
  • 当前用户未发表评论但其他人发表评论的帖子
  • 没有评论的帖子
  • 仅包含当前用户评论的帖子
于 2013-07-09T19:44:33.057 回答