获得我评论过的新评论帖子?

时间:2013-07-09 19:24:32

标签: mysql sql news-feed

我为此设置了一个典型的MySQL数据库:post table,user table,comment table。

查询类似&#34的最佳方法是什么;获取我评论过的帖子,自我上次评论以来有新评论"?我很难找到如何将其他用户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

1 个答案:

答案 0 :(得分: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
) 

为每个帖子选择发布数据,这些帖子具有由其他用户创建的评论,其时间戳值大于当前用户发布的最新评论。包括区别只能获得每个帖子一次,因为帖子可能在当前用户的最新信息后有多个评论。

SQL Fiddle.小提琴假设当前用户的ID为100并提供以下示例:

  • 最新评论是当前用户和其他用户之前评论的帖子
  • 当前用户已评论过的帖子以及其他用户之后评论
  • 当前用户尚未评论但其他人有
  • 的帖子
  • 没有评论的帖子
  • 仅包含当前用户评论的帖子