Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] jak stworzyć JOIN żeby wyświetlał brakujące wartości
M@X
post 28.11.2014, 11:52:43
Post #1





Grupa: Zarejestrowani
Postów: 212
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Warszawa

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


Witam.
Tworząc proste zapytanie:
  1. SELECT id, imie, nazwisko FROM gracze;

wyskakuje mi powiedzmy 1000 rekordów

Jednak posiadam drugą tabele "odznaczenia" gdzie są identyfikatory graczy + kolumna level ale nie dla każdego identyfikatora, powiedzmy jest tych rekordów tylko dla 800 graczy.

Więc tworząc poniższego JOINa wyświetli mi tylko te 800 rekordów gdzie istnieje łącznik "id"
  1. SELECT gr.id, gr.imie, gr.nazwisko, odz.level
  2. FROM gracze gr
  3. JOIN odznaczenia odz ON gr.id = odz.id;


Moje pytanie brzmi, w jaki sposób stworzyć JOINa, aby wyświetlił mi wszystkie 1000 rekordów, a tam gdzie w tabeli "odznaczenia" nie ma odpowiadającej wartości, po prostu wyświetlił puste, tzn np:

id | imie | nazwisko | level
1 Imie Nazwisko 1
2 Imie Nazwisko 4
3 Imie Nazwisko [null]
4 Imie Nazwisko 4
5 Imie Nazwisko 3
6 Imie Nazwisko [null]
7 Imie Nazwisko 5
...


--------------------
"timeo danaos at dona ferentes"
Go to the top of the page
+Quote Post
Turson
post 28.11.2014, 11:54:22
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


LEFT JOIN
Go to the top of the page
+Quote Post
M@X
post 28.11.2014, 12:01:43
Post #3





Grupa: Zarejestrowani
Postów: 212
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Warszawa

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


hmmm samo dopisanie LEFT JOIN nic nie zmieniło... może coś jeszcze poza tym powinienem dodać ?


--------------------
"timeo danaos at dona ferentes"
Go to the top of the page
+Quote Post
nospor
post 28.11.2014, 12:05:40
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




zamiast JOIN z pierwszego posta mialo byc LEFT JOIN. Ta prosta zmiana robi co chcesz. Jesli ci nie robi, znaczy ze źle zmodyfikowales pierwszego posta

ps:
gr.id = odz.id; ? w tabeli odznaczenia pole ID wskazuje na ID grupy?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
M@X
post 28.11.2014, 12:17:24
Post #5





Grupa: Zarejestrowani
Postów: 212
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Warszawa

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


cholender nie wszystko napisałem w zapytaniu smile.gif faktycznie to co piszecie sie zgadza (pomógł+)

w takim razie dopisze dalej o co mi chodzi, mam nadzieje że nie namieszam smile.gif

Chciałbym w tym zapytaniu dodac jeszcze WHERE

mianowicie:

  1. SELECT gr.id, gr.imie, gr.nazwisko, odz.level
  2. FROM gracze gr
  3. JOIN odznaczenia odz ON gr.id = odz.id
  4. WHERE odz.level = '1';


ale tak aby wyświetlił mi wszystkie rekordy gdzie level = 1 lub nie jest puste.. tzn:

id | imie | nazwisko | level
1 Imie Nazwisko 1
3 Imie Nazwisko [null]
5 Imie Nazwisko 1
6 Imie Nazwisko [null]
7 Imie Nazwisko [null]
9 Imie Nazwisko 1
...

Gdzie tabela "odznaczenia" w ogóle nie ma redordów id = 3, 6, 7


--------------------
"timeo danaos at dona ferentes"
Go to the top of the page
+Quote Post
nospor
post 28.11.2014, 12:22:10
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




WHERE odz.id is null or odz.level = '1';
no i LEFT JOIN rzecz jasna


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
M@X
post 28.11.2014, 13:03:31
Post #7





Grupa: Zarejestrowani
Postów: 212
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Warszawa

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


hmmm jakoś nie jestem pewny tego ....
czy "is null" nie powinien wyciągać tych rekordów dla których wartośc level = 'null' ?

mi chodzi tak naprawde o wyciągnięcie tych rekordów z tabeli "odznaczenia" które nie istnieją...

tzn jeśli w tabeli "gracze" istnieje jakiś rekord o id = 10 a w tabeli "odznaczenia" go nie ma to wtedy żeby zapytanie właśnie wyświetliło go że ma level puste


--------------------
"timeo danaos at dona ferentes"
Go to the top of the page
+Quote Post
nospor
post 28.11.2014, 13:05:56
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
tzn jeśli w tabeli "gracze" istnieje jakiś rekord o id = 10 a w tabeli "odznaczenia" go nie ma to wtedy żeby zapytanie właśnie wyświetliło go że ma level puste
Kurcze.... No i to wlasnie ci podalem....

Chcesz albo wyciagnac oznaczenia, ktore mają level=1 albo te, ktore nie istnieją. No i tak masz.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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.2025 - 19:27