【问题标题】:get posts that I have commented on with new comments?获取我用新评论评论过的帖子?
【发布时间】:2013-07-09 19:24:31
【问题描述】:

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

查询诸如“获取我上次评论后有新 cmets 的评论的帖子”之类的最佳方式是什么?我无法确定如何将其他用户的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

【问题讨论】:

  • 请在您的问题中提供一些数据。
  • 输入和输出数据。

标签: mysql sql feed


【解决方案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 以仅获取每个帖子一次,因为帖子可能在当前用户的最新消息之后有多个 cmet。

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

  • 最新评论是当前用户和其他用户之前评论过的帖子
  • 当前用户发表评论,其他用户随后发表评论的帖子
  • 当前用户未发表评论但其他人发表评论的帖子
  • 没有 cmets 的帖子
  • 只有当前用户的 cmets 的帖子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 2017-07-29
    • 2014-01-23
    相关资源
    最近更新 更多