0

我有一个非常庞大的 SQL 查询来检查通知,我在表中有几种不同类型的通知,即:帖子、喜欢、评论、照片评论、照片喜欢、视频喜欢等。(总是添加更多)而且我有遇到问题,我真的不确定如何最好地做到这一点。到目前为止,我所做的方式工作得很好,而且真的很容易添加,但是这个通知类型我必须检查的不仅仅是另一个表,我必须检查另外两个,但我无法让它工作。

所以这里是:(这只是我庞大查询的一部分,唯一相关的部分)

n.uniqueID = ANY (
              SELECT photos.id
              FROM photos INNER JOIN posts ON (photos.id=posts.post)
              WHERE photos.state=0
              AND posts.state=0 
              AND posts.id = ANY (
                                   SELECT likes.postID FROM likes
                                   INNER JOIN posts ON (posts.id=likes.postID)
                                   WHERE likes.state=0 AND posts.state=0
                                  )
                )

所以基本上我真正需要做的就是检查state每个表中的列,因为这说明它是否被删除(如果它不是 0 那么它被删除并且不应该返回)所以它会像:

IF photos.state=0 AND posts.state=0 AND likes.state=0把它返还。

  • n.uniqueID, posts.post, 和photo.id都将是相同的值。
  • posts.idlikes.postID将是相同的值。

我的问题是它似乎没有检查likes.state,我不认为。

4

1 回答 1

1

我认为您只想在一个查询中将三个表连接在一起:

n.uniqueID = ANY (
              SELECT photos.id
              FROM photos INNER JOIN
                   posts
                   ON photos.id=posts.post inner join
                   likes
                   on posts.id = likes.postId
              WHERE photos.state=0 and
                    posts.state=0 and
                    likes.state = 0
                  )

您的逻辑是当有状态为 0 的点赞或帖子时不返回。似乎所有点赞和帖子的状态都为零。为此,请使用having子句进行聚合:

n.uniqueID = ANY (
              SELECT photos.id
              FROM photos INNER JOIN
                   posts
                   ON photos.id=posts.post inner join
                   likes
                   on posts.id = likes.postId
              where photos.state = 0
              group by photos.id
              having MAX(posts.state) = 0 and MAX(likes.state) = 0
于 2013-01-08T19:37:38.743 回答