Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Pobranie powiązanych rekordów i ich powiązanych, Zapytanie w zapytaniu
nyfko
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 29.07.2014

Ostrzeżenie: (0%)
-----


Witam. By wyjaśnić problem przedstawię wymyśloną sytuację jako przykład.

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



I teraz chcę sprawdzić sprzęty powiązane z ID 1 czyli z "Komputer PC".
W takim wypadku zrobiłbym zapytanie

  1. SELECT * FROM rtv WHERE powiazanie = 1


To zwróciło by mi:
Kod
4   Karta graficzna              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



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?

Ten post edytował nyfko 8.05.2016, 13:20:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Dać się da (IMG:style_emoticons/default/smile.gif) ale wymaga, to zmiany struktury bazy danych na:

tabela sprzet
id | nazwa
1 Dysk SSD
2 Kabel SATA
3 Karta graficzna

tabela sprzet_zestawy
id | node | sprzet_id | parent_id | depth
1 1 1 NULL 1
2 1 2 1 2
3 1 3 2 3

  1. SELECT * FROM sprzet_zestawy sp JOIN sprzet s ON (s.sprzet_id = sp.id) WHERE node = 1
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 30.12.2025 - 11:55