我为此设置了一个典型的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
答案 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并提供以下示例: