Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] laczenie tabel o roznych kolumnach
modziar
post 3.06.2011, 11:41:56
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 11.02.2011

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


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.
Go to the top of the page
+Quote Post
Hpsi
post 3.06.2011, 11:59:15
Post #2





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


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

Ten post edytował Hpsi+ 3.06.2011, 12:00:35


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
modziar
post 3.06.2011, 15:19:57
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 11.02.2011

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


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ę.

Ten post edytował modziar 3.06.2011, 15:26:02
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 6.06.2024 - 17:21