Mysql 2 Tables连接限制从两个表返回结果

时间:2012-07-10 10:27:12

标签: mysql join

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

我有两张桌子。

**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。我需要的是为每个主要评论返回5个子评论。

有人请在这里提出一些建议/疑问。

非常感谢。

1 个答案:

答案 0 :(得分: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值。