0

コメントテーブルがあります。すべてのコメントは、別のコメントへの応答である可能性があります。

テーブル構造:

CREATE TABLE comments
(
    id integer NOT NULL,
    content text,
    root integer NULL,
    date_added timestamp without time zone DEFAULT now()
)

最新の 10 個のスレッドとその応答を選択する必要があるため、結果として、たとえば 10 個のスレッドと 8 個の応答が得られる可能性があります。私はそれをするのが難しいかどうかわかりません。私はもう試した:

SELECT content FROM comments 
ORDER BY date_added DESC 
LIMIT 10 + (SELECT COUNT(*) FROM COMMENTS WHERE root IS NOT NULL)

しかし、これは適切な効果がありません。

4

1 に答える 1

1

あなたが望むものかどうかはわかりませんが、再帰的な cte が役立つようです:

with recursive cte as (
    -- anchor of the query - last 10 threads
    select c.id, c.content 
    from comments as c
    where c.root is null -- top level threads
    order by c.date_added desc
    limit 10

    union all

    -- recursively get all children
    select c.id, c.content
    from comments as c
        inner join cte as cr on cr.id = c.root
)
select
    content
from cte
于 2013-11-13T18:22:40.037 に答える