0

我一直在尝试这个要求几个小时,但我一无所知,因为我没有得到想要的结果。

我有两张桌子。

**Main Comment Table
----------------------------------------------------------------------------
id | comments | date_commented | comment_owner | commented_by 
1    hello world  **********        321             123

Child Comment Table
----------------------------------------------------------------------------
id | mainpostID| child_comment_data           | commented_by |  date_commented** 
1     1          child comment of hello world    456             ********

我的要求:
我想为每个主要评论检索前 10 条主要评论以及 Chilcomments。我想将每个主要评论的子评论数量限制为 5 个。

我尝试了什么:

SELECT maincomment.comments, childcomment.child_comment_data 
FROM maincomment
LEFT JOIN childcomment ON maincomment.id = childcomment.mainpostID
AND maincomment.comment_owner = childcomment.commented_by
WHERE maincomment.id = childcomment.mainpostID
ORDER BY dateposted DESC
LIMIT 10

结果:我只得到 10 个主要评论,但每个主要评论的子评论数量只有 1 个。我需要为每个 Maincomment 返回 5 个子评论。

有人请在这里提供一些建议/查询。

非常感谢。

4

1 回答 1

1

您可以使用此解决方案:

SELECT a.*, b.*
FROM
(
    SELECT *
    FROM maincomment
    ORDER BY dateposted DESC
    LIMIT 10
) a
LEFT JOIN
(
    SELECT a.*
    FROM childcomment a
    INNER JOIN childcomment b ON a.mainpostID = b.mainpostID AND a.id <= b.id
    GROUP BY a.id
    HAVING COUNT(1) <= 5
) b ON a.id = b.mainpostID
ORDER BY a.dateposted DESC, b.date_commented DESC

这将获得 10 个最新的主要评论中最多 5 个最新的子评论。如果特定主评论没有子评论,则子评论数据将包含NULL值。

于 2012-07-10T10:50:46.150 回答