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
""")