0

私はこの要件を数時間試してきましたが、目的の結果が得られないため、無知です。

私は2つのテーブルを持っています。

**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 件の Main Comment と、各 Main コメントの 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

結果: Maincomments は 10 個しか取得できませんが、main コメントごとに childcomments の数は 1 つだけです。必要なのは、Maincomment ごとに 5 つの childcomments を返すことです。

誰かがここでいくつかの提案/クエリを手伝ってくれませんか.

どうもありがとう。

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 に答える