Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [sql] Zapytanie - kategorie
Forum PHP.pl > Forum > Bazy danych
anas
Hej.

Mam pytanie odnosnie zapytania SQL.

Posiadam powiedzmy natepujaca tabele z Grupami towarowymi:

- GrupaID
- Nazwa
- RodzicID

i teraz chcialbym wysiagnac wszystkie rekordy az otrzymam w polu rodzic NULL - chodzi mi o stworzenie takiego posortowanego drzewka - a mianowicie to galezi tego drzewa.

Np. mam takie dane:
Kod
GrupaID | Nazwa     | RodzicID
-----------------------------------------
1       | Aparaty   | Null
-----------------------------------------
2       | Statywy   | 1
-----------------------------------------
3       | Wielofun  | 2
-----------------------------------------
4       | Kamery    | Null
-----------------------------------------
5       | Cyfrowe   | 4
-----------------------------------------
6       | Analog    | 4
-----------------------------------------
7       | Professio | 5

i teraz chce powiedzmy wyciagnac dane dla Nazwy Proffesio w taki sposob ze bede mial sortowanie od najstarszego rodzica czyli Kamery->Cyfrowe->Professio.

dzieki za kazda podpowiedz.

ps. zalezy mi na tym aby rozwiazac to na poziomie bazy danych

pozdrowka

anas
spenalzo
Nie warto robić jednym zapytaniem...Da się, ale trzeba wiedzieć ile jest poziomów zagłębień itd itp -
Kiedyś dużo myślałem jak to zrobić, ale w koncu wybrałem najprostszą i najlepszą wersje - rekurencyjne pobieranie daych. Należy bowiem pamiętać, że od ilości zapytań znacznie wazniejsza jest ich skomplikowanie i ilość zwracanych danych - tymczasem np. 10 zapytań mniej obciąży baze niż 1 skomplikowane zapytanie (taki sposób jak obmyśliłem przy 10 stopniach zagłebien odwoluje sie 10 razy do tej samej tabeli) - strona na pewno bedzie szybciej sie generować przy kilku(-nastu,-dziesieciu) prostych zapytaniach niż jednym.

A jeżeli chcesz wiedzieć jak, to podsune rozwiązanie:
  1. SELECT L1.Nazwa AS L1nazwa, L2.Nazwa AS L2nazwa FROM kategorie L1 LEFT JOIN kategorie L2 ON (L2.RodzicID=L1.GrupaID AND L1.RodzicID IS NOT NULL) WHERE ....

Coś w tym stylu, bo nie mam teraz możliwości sprawdzenia
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.