返回用户最近评论的帖子以及没有评论的帖子

时间:2017-03-31 09:35:17

标签: sql ruby-on-rails postgresql join activerecord

使用Rails和Postgres我正在处理复杂的SQL查询以返回具有以下条件的所有帖子:

  1. 每个帖子发布的最后一条评论并非由特定用户撰写; OR
  2. 帖子没有评论
  3. 我已构建查询以返回发布的最后一条评论未由该特定用户创作的帖子,但我无法解决如何修改此问题以返回没有评论的帖子。< / p>

     Post 
      .joins(:comments)
      .joins(
        "INNER JOIN (
          SELECT DISTINCT ON (commentable_type, commentable_id) commentable_type, commentable_id, id
          FROM comments
          WHERE comments.author_id != #{user.id}
          ORDER BY commentable_type, commentable_id, created_at DESC, id
        ) most_recent_comments ON (
          most_recent_comments.id = comments.id
        )"
      )
    

    有什么建议吗?

1 个答案:

答案 0 :(得分:0)

想想我实际上已经弄明白了。我需要使用includes对注释执行左外连接,然后在第二个joins方法中执行相同操作:

 Post 
  .includes(:comments)
  .joins(
    "LEFT outer JOIN (
      SELECT DISTINCT ON (commentable_type, commentable_id) commentable_type, commentable_id, id
      FROM comments
      WHERE comments.author_id != #{user.id}
      ORDER BY commentable_type, commentable_id, created_at DESC, id
    ) most_recent_comments ON (
      most_recent_comments.id = comments.id
    )"
  )