SQL dotaz pro vyčtení stromu zařízení

Kane

SQL dotaz pro vyčtení stromu zařízení
« kdy: 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, 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

Kód: [Vybrat]
           1
     |     |    |
     2     4    7
     |     |
     5     6
           |
           3
« Poslední změna: 15. 11. 2018, 14:36:08 od Petr Krčmář »


BoneFlute

  • *****
  • 2 043
    • Zobrazit profil
Re:SQL dotaz pro vycteni stromu zarizeni
« Odpověď #1 kdy: 15. 11. 2018, 14:10:57 »
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, 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.