This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
support_functions [2017/05/26 13:46] daniel [get_header_line()] |
support_functions [2018/04/20 13:17] (current) daniel Add child_tags |
||
---|---|---|---|
Line 71: | Line 71: | ||
END; | END; | ||
$$ LANGUAGE plpgsql STABLE STRICT; | $$ LANGUAGE plpgsql STABLE STRICT; | ||
+ | </file> | ||
+ | |||
+ | ====== child_tags(int) ====== | ||
+ | **Return all childs of a tag.** \\ | ||
+ | Takes the ID of a tag or null to designate the root of all tags. Returns | ||
+ | the set of child tags. | ||
+ | |||
+ | <file sql child_tags.sql> | ||
+ | create function child_tags(top_id integer) returns setof integer | ||
+ | as $$ | ||
+ | WITH RECURSIVE tagr(_tag_id) as ( | ||
+ | select tag_id | ||
+ | from tags where parent_id is not distinct from top_id | ||
+ | UNION ALL | ||
+ | select | ||
+ | tag_id | ||
+ | FROM tags JOIN tagr ON tagr._tag_id=tags.parent_id | ||
+ | ) | ||
+ | select _tag_id FROM tagr; | ||
+ | $$ language sql stable | ||
</file> | </file> | ||