sql >> Database >  >> RDS >> PostgreSQL

Postgres groeperen op zoekopdracht

Voor je recursieve zoekopdracht kun je een hiërarchisch pad maken met behulp van deze truc met strings met 0-pads:SQL Fiddle

with recursive comment_list(article_comment_id, parent_comment_id, comment, article_id, comment_depth, comment_path) AS (
    select c.article_comment_id, 
           c.parent_comment_id, 
           c.comment, 
           c.article_id, 
           c.comment_depth,
           substr(CAST(1000000000+c.article_comment_id as varchar(1000)),2)
    from test_comment c
    where article_id = 100
      and parent_comment_id = 0

  union all

    select c.article_comment_id, 
           c.parent_comment_id, 
           c.comment, 
           c.article_id, 
           c.comment_depth,
           cl.comment_path || substr(CAST(1000000000+c.article_comment_id as varchar(1000)),2)
    from test_comment c
       join comment_list cl on c.parent_comment_id = cl.article_comment_id
)
select cl.article_comment_id,
     cl.comment_path, 
     cl.parent_comment_id,
     cl.comment, 
     cl.article_id,
     cl.comment_depth
from comment_list cl
order by cl.comment_path, cl.article_comment_id, cl.comment_depth;

Laat de GROUP BY vallen. U wilt ze "groeperen" voor weergave, wat eigenlijk "ORDER BY" is

select cl.parent_comment_id, 
     cl.article_comment_id,
     cl.comment, 
     cl.article_id,
     cl.comment_depth
from comment_list cl
order by cl.parent_comment_id, cl.article_comment_id, cl.comment_depth;

Misschien heb je nog steeds de cl.root_id . nodig in de volgorde door, dus het zou kunnen zijn

order by cl.root_id, cl.parent_comment_id, cl.article_comment_id, cl.comment_depth;



  1. Oracle ODP.NET-verbindingsreeks:wat gaat er in Data Source?

  2. Schakel triggers uit en schakel triggers opnieuw in, maar vermijd tussentijdse wijziging van de tabel

  3. Creëer dynamische tabel van functie in PostgreSQL

  4. PHP - MYSQL onbekende kolom in WHERE Join