Myślę, że taki wątek gdzieś już istnieje, ale nie wiem jak go sformułować w wyszukiwarce przez co nie umiem znaleźć.
Mam takie tabelę (zapiszę w uproszczony sposób):
tabela a
IDa
dana_a_1
dana_a_2
tabela b
IDb
a [odpowiada IDa z tabeli a]
dana_b_1
dana_b_2
tabela c
IDc
b [odpowiada IDb z tabeli b]
dana_c_1
dana_c_2
I teraz chciałbym w jednym zapytaniu (jeśli to możliwe) zrobić poniższe rzeczy:
-
Znając IDc wyciągnąć dane w postaci: {IDc,b,dana_c_1,dana_c_2,a,dana_b_1,dana_b_2,dana_a_1,dana_a_2}
-
Wyciągnąć wszystkie pola z bazy c w postaci:
[{IDc,b,dana_c_1,dana_c_2,a,dana_b_1,dana_b_2,dana_a_1,dana_a_2},...] -
Dla punktu 1,2 w przypadku gdy któreś powiązane pole nie istnieje uzupełnić je jakimiś zdefiniowanymi wartościami. np.: dana_b_1=-1 itd.
jeśli jest możliwość to chciałbym również zmienić nazwy pól w wyniku na np.: tabelab_dana_b_1 - chodzi o dodanie prefiksu, ponieważ zdarza się że w moim przypadku nazwy pól w bazie są takie same (np. pole: nazwa).
Aktualnie to co wyżej opisałem robię w PHP tak:
- Wykonuję kilka zapytań i wyniki z zapytań łączę (nie trzeba tłumaczyć - najprościej jak się da).
- Wyciągam wszystkie pola z tabel a,b,c - 3 zapytania. Dla tabel a,b robię mapowania w stylu: {IDx => {IDx, dana_x_1, ...}}, następnie łączę wyniki ze sobą. Dzięki temu punkt 3 mam załatwiony, ponieważ mogę w prosty sposób sprawdzić czy pole istnieje w bazie. 3 zapytania wydawały mi się szybsze niż 2x ilosc danych w tabeli c + 1