Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: horalhoralhora 06. 06. 2019, 13:13:21

Název: MySQL - určení hierarchie potomka
Přispěvatel: horalhoralhora 06. 06. 2019, 13:13:21
V prikladove tabulce bych potreboval urcit "top rodice" "potomka"

Kód: [Vybrat]
+----+-----------+----------+
| 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?
Název: Re:MYSQL - urceni hierarchie potomka
Přispěvatel: hechj 06. 06. 2019, 13:38:07
Je to id, které nemá rodiče
Název: Re:MySQL - určení hierarchie potomka
Přispěvatel: Miroslav Šilhavý 06. 06. 2019, 13:47:54
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;
Název: Re:MySQL - určení hierarchie potomka
Přispěvatel: Standa Blábol 06. 06. 2019, 14:20:39
https://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/

Ale je to celkem starsi clanek.

Googli "connect by prior in mysql"
Název: Re:MySQL - určení hierarchie potomka
Přispěvatel: Standa Blábol 06. 06. 2019, 14:22:56
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.
Název: Re:MySQL - určení hierarchie potomka
Přispěvatel: Death Walker 06. 06. 2019, 18:16:53
Njn, v postgresql to mas na jeden dotaz http://sqlfiddle.com/#!17/4f415/1/0