2013-07-09 144 views
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 
+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,并提供以下示例情况:

  • 一个帖子里最近的评论是当前用户的和其他用户先前评论
  • 一个帖子在当前用户评论等用户事后评论
  • 在当前用户还没有评论过的讯息,但另一些
  • 一个帖子有没有意见
  • 仅有来自当前用户的评论的帖子