Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] laczenie tabel o roznych kolumnach
Forum PHP.pl > Forum > Przedszkole
modziar
Witam

Tabela 1
ID |a |b| c |d |e
1 |2| 3| 4| 5 |6
3 |d|d | d|d |d

Tabela 2
UID |r | t | y| u | i | O
1 |7 |1c| f |dsd|w|234

Tabela 3
O | a | f | g | h
234|7e|4e|3e|e

W jednym zapytaniu chcę pobrać dane

Z tabeli jeden gdzie ID=1 (cde)
Z tabeli 2 gdzie ID z pierwszej =UID z drugiej(u,i)
Z tabeli 3 gdzie O=O z tabeli drugiej(f,g,h)

Czyli chcę taki wynik

c|d|e |u | i |f |g |h
4|5|6|dsd|w|4e|3e|e

Oczywiście standardowo szukałem w różnych źródłach ale jakoś tego nie łapię,oprócz rozwiązania byłbym bardzo wdzięczny za wytłumaczenie
ponieważ chcę to umieć i rozumieć,najlepiej na różnych przykładach,zdaje się że chodzi o JOIN ale nie wiem jak tego użyć po przeczytaniu tych wszystkich kursów.
Hpsi
Ogólnie jeśli dobrze zrozumiałem twój pomysł masz tak
Tabela 1 - kolumna ID jest kluczem do Tabeli 2 (uid) a z tabeli 2 klucz do tabeli 3 to O

Nie jestem b. dobry w tłumaczeniu ale spróbuje ci to wytłumaczyć smile.gif
Do łączenia używasz JOIN (left join, right join, join) w moim przypadku użyje left joina, komunikujamy się między tabelami dzięki kluczą (komenda w sql ON) jak już wcześniej wspomniałem ID -> UID -> O -> o
  1. SELECT `tabela`.`c`, `tabela`.`d.`, `tabela`.`e`, `tabela2`.`u`, `tabela2`.`i`, `tabela3`.`f`, `tabela3`.`g`, `tabela3`.`h`
  2. FROM `tabela 1` AS `tabela`
  3. LEFT JOIN `tabela 2` AS `tabela2` ON `tabela`.`id`=`tabela2`.`UID`
  4. LEFT JOIN `tabela 3` AS `tabela3` ON `tabela2`.`O`=`tabela3`.`O`


Pamiętaj, że używając JOINa musisz mieć jakieś klucz, wg którego chcesz się łączyć między tabelami
modziar
A co w sytuacji gdy w jednej z tabel jakiś rekord występuje 3 razy i nie chcę używać while do wyciągania a odwoływać się do niego np. jak do tablicy

chodzi mi o taką sytuację

id nazwa
2 aaa
2 bbb
2 ccc
3 d
4 e
5 r

nazwa[0]=aaa
nazwa[2]=bbb
nazwa[3]=ccc

chodzi mi o taka sytuacje ze gdy wyciągam dane z 3 tabel jednym zapytaniem to po wyświetleniu w najprostszy sposób otrzymam pierwszy powtarzający się rekord,gdybym robił to 'while'm i do tej konkretnej tabeli w ktorej mi sie powtarza do dostał bym wszystkie nazwy dla id=2 a tu dostaję pierwszą i nie wiem jak dostać się do pozostałych.


czyli taka sytuacja

Tab1

id a b c
1 2 3 4
2 r r r

z tej rekord c ktore ma id 1

Tab 2

id f g h
1 2 3 4
4 f f f

z tej h ktore ma id 1

tab 3

id g h j
1 sddd d d
1 ddd d d
1 dfff f f

a z tej g ktore ma id 1
Chodzilo o to aby z tych 3 tabel wyciągnąć to co ma id 1



Gdy zaś zrobie to 'while'na tym zapytanie wyciągnę pewnie te 2 brakujące rekordy ale razem z nimi całe zapytanie zrobię 3 razy o ile oczywiście dobrze myślę.
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.