Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Kane 15. 11. 2018, 13:54:49
-
Pekny odpoledne panove a damy, potrebuji vycist data z MySQL (v5.1) databaze a to rekurzivne (prohledanim do hloubky) od urciteho "rodice" - resp. vyhledat vsechny zaznamy.
Entita (Tabulka) `Devices` s atributy `id`, `name`,...,`parent_id`.
Nasel jsem diskusi na StackOverflow (https://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query), kde jsem nasel, upravil a spustil select ale bohuzel vycet neni kompletni. Lze nejakym zpusobem vycist vsechna data zavisla na id pomoci sql dotazu bez programovani/scriptovani?
Priklad dat:
1,Jedna,0
2,Dva,1
3,Tri,6
4,Ctyri,1
5,Pet,2
6,Sest,4
7,Sedm,1
Potrebuju docilit tohoto vystupu:
1,Jedna,0
2,Dva,1
5,Pet,2
4,Ctyri,1
6,Sest,4
3,Tri,6
7,Sedm,1
Strom
1
| | |
2 4 7
| |
5 6
|
3
-
Pro ukládání stromu v relačních databázích se používá takzvané Traverzování kolem stromu http://zaachi.com/2009/07/18/traverzovani-kolem-stromu-1.html (http://zaachi.com/2009/07/18/traverzovani-kolem-stromu-1.html), https://php.vrana.cz/traverzovani-kolem-stromu-prakticky.php (https://php.vrana.cz/traverzovani-kolem-stromu-prakticky.php). Což funguje dobře a rád to používám. Drahá operace je zápis (musí se udělat několik updatů, insertů). Čtení je relativně levné, a jde udělat jedním dotazem, a dostaneš přesně to co říkáš, že chceš. Při použití triggerů to začne být supr transparentní.
Pokud si chceš zachovat stávající strukturu databáze, tak bych to asi řešil na humpoláka řadou dotazů.
- první dotaz načte kořen a získá všechny potomky, jejich id.
- druhý dotaz načten všechny potomky podle id a získá potomky potomků.
- atd.
Tedy to řešit aplikačně. Případně to zabalit do nějaké SP.