2

我正在编写的查询有一些问题。这似乎是非常频繁的表结构,所以我希望得到一些帮助。

假设我有 3 个类似于 facebook 结构的表。Users, Wall Posts, 和Comments. 用户可以发布墙帖,并对其他墙帖发表评论。

在用户页面上,我想显示用户墙帖子和该帖子有多少评论的计数。这是我到目前为止所拥有的

Wall Post使用用户 ID 作为表的内部连接来查询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 = ?
4

1 回答 1

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

于 2013-03-09T01:28:31.340 回答