Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] LEFT JOIN
adi456
post
Post #1





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 21.01.2010
Skąd: Nowy Sącz

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


Witam,

posiadam 3 przykładowe tabele

1.
test1 z kolimnami id, typ
2.
test2 z kolumnami id, nazwa
3.
test3 z kolumnami id, nazwa

i teraz robie następujące zapytanie

SELECT * FROM test1
LEFT JOIN test2 ON test1.id=test2.id AND test1.typ='2'
LEFT JOIN test3 ON test1.id=test3.id AND test1.typ='3'

ogólnie chodziło mi o to żeby pobierać:
- wartość nazwy z test2 tylko gdy wartość z kolumny typ z tabeli test1 jest równe 2
- wartość nazwy z test3 tylko gdy wartość z kolumny typ z tabeli test1 jest równe 3

i niby działa tylko problem polega na tym że tabele test2 i test3 posiadają kolumne o tej samej nazwie "nazwa"
z moich obserwacji wygląda to tak że:
- w przypadku gdy typ=3 wszystko jest ok
- ale gdy typ=2 nazwa jest pusta

wiem że to normalne działanie mysql i można to obejść dodając do zapytania np "... SELECT *, test3.nazwa as nazwa2 FROM ... " ale to nie rozwiązuje mojego problemu.

pomoże ktoś?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


  1. SELECT IF(test1.typ=3,test3.nazwa,IF(test1.typ=2,test2.nazwa,test1.nazwa)) FROM test1
  2. LEFT JOIN test2 ON test1.id=test2.id
  3. LEFT JOIN test3 ON test1.id=test3.id

Ewentualnie użycie CASE.


--------------------
Go to the top of the page
+Quote Post
adi456
post
Post #3





Grupa: Zarejestrowani
Postów: 251
Pomógł: 0
Dołączył: 21.01.2010
Skąd: Nowy Sącz

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


dzięki wielkie śmiga, zrobiłem tak żeby było czytelniej bo twój przykład coś nie mógł mi zatrybić

SELECT *, IF(test1.typ=2,test2.nazwa,test3.nazwa) as nazwa FROM test1
LEFT JOIN test2 ON test1.id=test2.id
LEFT JOIN test3 ON test1.id=test3.id

Ten post edytował adi456 11.01.2017, 17:29:57
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 Aktualny czas: 21.08.2025 - 12:36