Mam np. tabelę "rtv" z kolumnami ID, nazwa, powiązanie z wierszami:
Kod
ID nazwa powiazanie
--------------------------------------
1 Komputer PC NULL
2 Wieża stereo NULL
3 Smartphone NULL
4 Karta graficzna 1
5 Słuchawka bluetooth 3
6 Telewizor NULL
7 Dysk twardy 1
8 Kabel SATA do dysku 7
--------------------------------------
1 Komputer PC NULL
2 Wieża stereo NULL
3 Smartphone NULL
4 Karta graficzna 1
5 Słuchawka bluetooth 3
6 Telewizor NULL
7 Dysk twardy 1
8 Kabel SATA do dysku 7
I teraz chcę sprawdzić sprzęty powiązane z ID 1 czyli z "Komputer PC".
W takim wypadku zrobiłbym zapytanie
SELECT * FROM rtv WHERE powiazanie = 1
To zwróciło by mi:
Kod
4 Karta graficzna 1
7 Dysk twardy 1
7 Dysk twardy 1
Ja jednak chciałbym sprawdzić poziom niżej, a więc by zwróciło by mi również sprzęty powiązane z tymi powiązanymi, czyli "Kabel SATA" który jest powiązany z "Dysk Twardy" który jest powiązany z wyszukiwanym "Komputer PC". Wystarczy mi tylko ten jeden "poziom" niżej, nie chcę szukać powiązań w nieskończoność. Dla uproszczenia powiązanie zawiera tylko jeden numer, więc słuchawki nie mogą np. należeć do Smartphona i Komputera jednocześnie.
Powinno zwrócić:
Kod
4 Karta graficzna 1
7 Dysk twardy 1
8 Kabel SATA do dysku 7
7 Dysk twardy 1
8 Kabel SATA do dysku 7
Da się to zrobić jakoś sensownie na jednym zapytaniu?
Myślałem aby pobrać pierwsze powiązania tym zapytaniem które podałem, a potem w pętlę PHP dać te same zapytania dla tych powiązanych. To jednak się chyba nie sprawdzi bo po pierwsze zwiększy to mocno liczbę zapytań, a co ważniejsze nie będę mógł zrobić paginacji itd.
Jakieś rady?