sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres gruppe efter forespørgsel

Til din rekursive forespørgsel kan du oprette en hierarkisk sti ved at bruge dette trick med 0-polstrede strenge: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;

Drop GRUPPE BY. Du vil "gruppere" dem til visning, hvilket i virkeligheden er "ORDER BY"

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;

Du har muligvis stadig brug for cl.root_id i rækkefølgen efter, så det kunne være

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



  1. Hvordan skriver man en politik i Oracle SQL, der begrænser adgangen til ikke-ejere for en tabel?

  2. Sammenlægning af to rækker til én, mens nulværdier erstattes

  3. Send e-mail fra MySQL trigger, når en tabel opdateres

  4. mysqli_fetch_array giver mig duplikerede rækker