Mam takie pytanko, jest sobie taka tabelka:
ID GRUPA OBECNA GRUPA_GLOWNA NAZWA 1 | 1 | 1 | Grupa Główna 2 | 2 | 1 | Podgrupa grupy głównej 3 | 3 | 2 | Podgrupa 2 poziomu 4 | 4 | 2 | Podgrupa 2 poziomu 5 | 5 | 3 | Podgrupa 3 poziomu 6 | 6 | 4 | Podgrupa 4 poziomu
Teraz chodzi o zapytanie , najlepiej jedno, które będzie wyciągało nam grupę główną później podgrupę , wszystkie podgrupy grupy głównej z tych wszystkich podgrup po kolei wszystkie ich podgrupy 2 poziomu a następnie z nich kolejne wszystkie podgrupy 3 poziomu i tak dalej...
Wstępnie myślałem nad użyciem uniona ale to się nie sprawdza.
miałem też takie zapytanie które działa dobrze póki się nie zmienią grupy obecne pozycji
SELECT nazwa , ID FROM tabela ORDER BY (case when grupa=grupa_glowna then grupa_glowna else grupa id) , nazwa ;
Później orbi się już coraz większy bałagan. W PHP rozwiązałem problem poprzez osobne 3 zapytania ale to zero optymalizacji jest (zapytanie generuje się fakt w niecałe 0.02 s. , tych grup będzie kilkadziesiąt tysięcy - maksymalnie zagnieżdżone do 4 poziomu...)
Proszę o jakieś wskazówki.
Osobiście idę w stronę
SELECT g.id , g1.id , g2.id , g3.id FROM grupa g LEFT JOIN (SELECT g1.id FROM grupa WHERE g1.grupa=g.grupa_glowna ORDER BY g1.nazwa) g1 ON g1.grupa=g.grupa_podstawowa LEFT JOIN (SELECT g2.id ...
Powtórzony zabieg łączenia 4 razy... Ale nie wiem jak się to faktycznie sprawdzi
Będę to testował a między czasie sprawdzał czy macie jakieś inne pomysły...
Pozdrawiam.
Ps. Proszę nie pisać rozwiązania rozbitego na kilka zapytań całkowicie osobnych bo to już dawno mam
EDIT---------------------
Rozwiązanie moje problemu, lecz nie wiem czy to będzie wystarczająco dobre...
SELECT p1.nazwa , p2.p2n , p3.p3n FROM pozycje p1 LEFT JOIN (SELECT p2.id , p2.nazwa p2n , p2.poz p2p , p2.grupa_podstawowa gp2 , p2.grupa p2g FROM pozycje p2 ) p2 ON p2.gp2=p1.grupa AND p2.gp2!=p2.p2g LEFT JOIN (SELECT p3.id , p3.nazwa p3n , p3.po p3p , p3.grupa p3g , p3.grupa_podstawowa gp3 FROM pozycje p3) p3 ON p2.m2g=p3.gp3 AND p3.gp3!=p3.p3g LEFT JOIN (SELECT p4.id , p4.nazwa p4n , p4.poz p4p , p4.grupa p4g , p4.grupa_podstawowa gp4 FROM pozycje p4) p4 ON p3.m3g=p4.gp4 AND p4.gp4!=p4.p4g ORDER BY p1.poz , p1.nazwa , p2p , p2n , p3p , p3n , p4p , p4n