Autor Zpráva
vladap
Profil
Přeji hezký den,

Mám data v tabulce. Data mají mezi sebou vazbu. Podle typu záznamů to může vypadat takto: 1:0, 1:N nebo 1:1.
Příklad uživ. zobrazení dat:
->Zaznam 1
-->Zaznam 2
--->Zaznam 3
--->Zaznam 6
-->Zaznam 4
--->Zaznam 7
->Zaznam 5

Jinak řečeno, příklad: Zaznam 3 a 6 mají vazbu na Zaznam 2, Zaznam 2 má vazbu 1 atd... Přičemž záznamy nejsou lineárně
inkrementalni, ale mohou být mezi sebou zproházené (položka vznikla později než ta co je vázána na další větev - TTree).

V tabulce to mám vyřešené tak, že každý záznam má své vlastní ID, třeba Column_ID a každý záznam má atribut
nazvaný např. column_att (což je vlastně ID položky, na kterou je vazba). Záznamy v tabulce vypadají nasledovně:
- Nazev - Column_ID - Column_Att (def. vazba)
- Zaznam 1 - 1 - NULL
- Zaznam 2 - 2 - 1
- Zaznam 3 - 3 - 2
- Zaznam 4 - 4 - 1
- Zaznam 5 - 5 - NULL
- Zaznam 6 - 6 - 2
- Zaznam 7 - 7 - 4

No a toto je výsledek, který potřebuji dostat jako výstup ze selectu (viz příklad na začátku):
- Nazev - Column_ID - Column_Att
- Zaznam 1 - 1 - NULL
- Zaznam 2 - 2 - 1
- Zaznam 3 - 3 - 2
- Zaznam 6 - 6 - 2
- Zaznam 4 - 4 - 1
- Zaznam 7 - 7 - 4
- Zaznam 5 - 5 - NULL


Dokážu záznamy seřadit podle této vazby nicméně to mám udělané dost složitě přes cursors (storage procedure). A je to bolestivě pomalé.
Potřebuji vymyslet select, který mi seřadí záznamy podle vazeb (sestupně/vzestupně).

Díky moc za nakopnuti.

vlada
Alphard
Profil
Použil jste klasickou metodu (vašemu Column_Att se obvykle říká Parent_ID), data se z ní tahají rekurzí, ať již na úrovni databáze, nebo v aplikaci po načtení všech dat (pro menší množinu dat). Jednoduchý a efektivní select s největší pravděpodobností nesestrojíte :-)
Jednoduchý výpis poskytne metoda traverzování kolem stromu, ale zase za cenu obtížné editace.
Metody ukládání stromových dat v relačních databázích | Interval.cz
PHP triky - Traverzování kolem stromu prakticky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0