我正在编写一个查询问题。这似乎是非常频繁的表结构,所以我很乐意帮助。
假设我有3个类似于facebook结构的表。 Users
,Wall Posts
和Comments
。用户可以发布墙贴,并评论其他墙贴。
在用户页面上,我想显示用户的帖子帖子以及帖子有多少条评论的计数。这就是我到目前为止所拥有的
我使用用户ID作为Wall Post
表的内部联接来查询User
表。这为我提供了该用户页面的一组结果。然后我遍历该结果集,从每个结果集中获取Wall Post id,并在Comment
表中查询该Wall Post Id的注释计数。这有效,但是我必须两次击中数据库。任何人都可以想到一种方法,我可以用一个查询来做到这一点吗?
第一个查询示例:
SELECT wallPost.*, user.currentDefault, user.displayName, user.userName
FROM wallPost
INNER JOIN user ON user.id = wallPost.sourceUserId
WHERE wallPost.recipientId = ? ORDER BY wallPost.id DESC
第二个查询示例:
SELECT COUNT(id) AS count
FROM comment
WHERE wallPostId = ?
答案 0 :(得分:2)
我会将计数添加为子查询,并将子查询加入主查询
SELECT
wallPost.*,
user.currentDefault,
user.displayName,
user.userName,
wallpost_commentcount.total
FROM
wallPost
INNER JOIN user ON user.id=wallPost.sourceUserId
LEFT JOIN (SELECT wallPostId,COUNT(*) as total FROM comment GROUP BY wallPostId) as wallpost_commentcount ON (wallpost_commentcount.wallPostId=wallPost.id)
WHERE
wallPost.recipientId = ?
ORDER BY wallPost.id DESC
请确保您在comment.wallPostId
上有索引,否则此查询将花费很长时间。
我使用LEFT JOIN
,因为即使没有评论记录,你总是想得到wallPost