계층 쿼리

WITH recursive category_hq(id, name, parent_id, children, brand_id, depth, path, cycle) as (
	SELECT id, name, parent_id, children, brand_id,
	1, array[id], false
	FROM brand_category
	WHERE id = 16
	
	UNION ALL
	
	SELECT c.id, c.name, c.parent_id, c.children, c.brand_id,
	p.depth + 1, array_append(p.path, c.id), c.id = any(p.path)
	
	FROM brand_category c, category_hq p
	WHERE p.id = c.parent_id
	AND not cycle	
)

SELECT * from category_hq
order by path
article_reply_qs = ArticleReply.objects.raw(f"""            
WITh RECURSIVE reply_parent(id, user_id, parent_id, reply, depth, path, cycle) as (            
    SELECT 	id, 
            user_id,
            parent_id, 
            reply, 
            1, 
            array[id],
            false			
    FROM rank_articlereply
    WHERE parent_id is null
        AND article_id = {article_id}
                
    UNION ALL
                
    SELECT 	c.id, 
            c.user_id,
            c.parent_id,
            c.reply, 
            p.depth+1,
            array_append(p.path, c.id),
            c.id = any(p.path)
    FROM rank_articlereply c, reply_parent p
    WHERE p.id = c.parent_id
            AND not cycle                        
)
            
SELECT * from reply_parent
order by path
""")

  • open/계층-쿼리.txt
  • 마지막으로 수정됨: 2020/06/09 06:37
  • 저자 127.0.0.1