Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: horalhoralhora 06. 06. 2019, 13:13:21
-
V prikladove tabulce bych potreboval urcit "top rodice" "potomka"
+----+-----------+----------+
| id | parent_id | child_id |
+----+-----------+----------+
| 1 | 4 | 5 |
| 2 | 4 | 3 |
| 3 | 3 | 1 |
+----+-----------+----------+
tzn: child_id 1 -> 3 -> 4 [top_rodic]
Vubec me nenapada jake query pouzit s ohledem na vykon. Poradi by nekdo?
-
Je to id, které nemá rodiče
-
S ohledem na výkon je nejlepší použít hierarchii intervalů: https://en.wikipedia.org/wiki/Interval_tree
Každý uzel je určen intervalem [left, right].
Každý potomek pak má left potomka > left předka, a right potomka < right předka.
Potomky a předky pak poměrně rychle selectujete pomocí order by.
Pro předky prvku:
SELECT * FROM tree WHERE left < left_potomka ORDER BY left ASC;
Pro potomky:
SELECT * FROM tree WHERE left BETWEEN left_predka AND right_predka ORDER BY left ASC;
-
https://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/
Ale je to celkem starsi clanek.
Googli "connect by prior in mysql"
-
Tady je varianta pro MySQL 8
https://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query
Jinak zvazil bych prechod na Postgres.
-
Njn, v postgresql to mas na jeden dotaz http://sqlfiddle.com/#!17/4f415/1/0