Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Zapytanie złożone czy dwa zapytania
djtomaszq
post
Post #1





Grupa: Zarejestrowani
Postów: 192
Pomógł: 0
Dołączył: 5.07.2015

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


Mam tabele drużyny:
Id_druzyny -> nazwa

i Tabele terminarz:
Id->id_drużyny_home > id_drużyny_away

Czy da radę wyświetlić jednym zapytaniem zawartość terminarza podmieniajac id_drużyny_away i id_drużyny_home na nazwę z tabeli druzyna?
Home i away jest w relacji z id_drużyny.
Czy zrobić to w dwoch zapytaniach?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
nospor
post
Post #2





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




Jedno zapytanie i to sie robi przy pomocy JOIN. W tym wypadku najlepiej LEFT JOIN
Go to the top of the page
+Quote Post
djtomaszq
post
Post #3





Grupa: Zarejestrowani
Postów: 192
Pomógł: 0
Dołączył: 5.07.2015

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


  1. SELECT * FROM terminarz LEFT JOIN tabela ON tabela.id_druzyny = terminarz.id_druzyny_home OR tabela.id_druzyny = terminarz.id_druzyny_away


?
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




W tym wypadku dwa LEFT JOIN. Jeden na druzyne home a drugi na away

i w select w podaj aliasy na name z kazdego jOINa bo ci sie wprzeciwnym wypadku nadpisza
Go to the top of the page
+Quote Post
djtomaszq
post
Post #5





Grupa: Zarejestrowani
Postów: 192
Pomógł: 0
Dołączył: 5.07.2015

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


Coś takiego?
  1. "SELECT terminarz.*, alias1.nazwa as home, alias2.nazwa as away FROM terminarz JOIN druzyna alias1 ON alias1.id = terminarz.id_druzyny_home JOIN druzyna alias2 ON alias2.id = terminarz.id_druzyny_away"


.. czyli wywołując mogę aliasem (jak niżej) a nie $wiersz['nazwa'] dwa razy?

  1. $wiersz = $zapytanie->fetch_assoc();
  2.  
  3. echo $wiersz['home']." - ".$wiersz['away'];


Ten post edytował djtomaszq 27.07.2016, 09:09:25
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




Tak, dokładnie. Choc ja osobiscie bym uzyl LEFT JOIN zamiast JOIN. Zawsze to bezpieczniej jak z jakiegos powodu zniknie ci rekord z tabeli druzyna
Go to the top of the page
+Quote Post
djtomaszq
post
Post #7





Grupa: Zarejestrowani
Postów: 192
Pomógł: 0
Dołączył: 5.07.2015

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


Hmm czyli jeśli zrobie LEFT JOIN to jak mi z tabeli druzyny zniknie w np. 2 id nazwa="Legia" to w kodzie w tym miejscu pokaże mi się napis "NULL" ? a jeśli ta sama sytuacja będzie w samym JOIN to wyskoczy błąd ?

.. i czy jeśli dodam tabele "kolejka" -> id/kolejka/id_pauza/data
gdzie "id_pauza' to będzie id druzyny z tabeli druzyny

to tak samo muszę zrobić alias pausa, JOINA i wywoływać $wiersz['pauza'] ?

Ten post edytował djtomaszq 27.07.2016, 10:42:26
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




Cytat
Hmm czyli jeśli zrobie LEFT JOIN to jak mi z tabeli druzyny zniknie w np. 2 id nazwa="Legia" to w kodzie w tym miejscu pokaże mi się napis "NULL" ? a jeśli ta sama sytuacja będzie w samym JOIN to wyskoczy błąd ?
Tak, z LEFT JOIN dostaniesz NULL. Z samym JOIN nie bedziesz mial bledu zapytania, ale tez nie pobierze ci rekordu z tabeli terminarz jesli nie bedzie istnialo zlaczenie.

Co do pauza to tak jak napisales
Go to the top of the page
+Quote Post
djtomaszq
post
Post #9





Grupa: Zarejestrowani
Postów: 192
Pomógł: 0
Dołączył: 5.07.2015

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


Coś zrobiłem źle..
  1. "SELECT terminarz.*, alias1.nazwa as home, alias2.nazwa as away alias3.nazwa as pauza FROM terminarz
  2. LEFT JOIN druzyna alias1 ON alias1.id = terminarz.id_druzyny_home
  3. LEFT JOIN druzyna alias2 ON alias2.id = terminarz.id_druzyny_away
  4. LEFT JOIN druzyna alias3 ON alias3.id = kolejka.id_pauza"
  5.  


ani tak.

"SELECT kolejka.*, terminarz.*, alias1.nazwa as home, alias2.nazwa as away alias3.nazwa as pauza
FROM kolejka, terminarz
LEFT JOIN druzyna alias1 ON alias1.id = terminarz.id_druzyny_home
LEFT JOIN druzyna alias2 ON alias2.id = terminarz.id_druzyny_away
LEFT JOIN druzyna alias3 ON alias3.id = kolejka.id_pauza"

błąd taki
  1. Exception: Unknown column 'kolejka.id_pauza' in 'on clause'


ale kolumna istnieje i zadeklarowałem ją..

Ten post edytował djtomaszq 27.07.2016, 11:04:55
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




Ale z czym sie laczy kolejka i co to w ogole jest? Jestem laikiem sportowym (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
djtomaszq
post
Post #11





Grupa: Zarejestrowani
Postów: 192
Pomógł: 0
Dołączył: 5.07.2015

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


Tabela "kolejka" zawiera id tej kolejki, nazwe kolejki itd. a id_pauze to jest druzyna która puzuje i ma relacje w tabeli drużyny z id i chciałem żeby zamiast id_pauze pokazywało jej odpowiednik nazwy z tabeli druzyny kolumny "nazwa"

a ta tabela ogolnie zawiera wiersze po 1 kolejce meczy, po 2 kolejce meczy itd

id - kolejka - sezon - id_pauze - data
1 - 1 - 1 - 6 - 12/12/2016
2 - 2 - 1 - 9 - 19/12/2016
3 - 3 - 1 - 3 - 26/12/2016
4 - 4 - 1 - 10 - 02/01/2017

Ten post edytował djtomaszq 27.07.2016, 11:30:04
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




No ale jak sie ma kolejka do teminarza? Bo teraz to nie ma sensu dla mnie
Go to the top of the page
+Quote Post
djtomaszq
post
Post #13





Grupa: Zarejestrowani
Postów: 192
Pomógł: 0
Dołączył: 5.07.2015

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


W terminarzu jest kolumna id_kolejki i relacja z id w tabeli kolejka
To pokazuje w jakiej kolejce grają druzyny z tego wiersza tabeli
Go to the top of the page
+Quote Post
nospor
post
Post #14





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




A, teraz to ma sens

  1. SELECT terminarz.*, alias1.nazwa AS home, alias2.nazwa AS away, druzynakolejka.nazwa AS pauza FROM terminarz
  2. LEFT JOIN druzyna alias1 ON alias1.id = terminarz.id_druzyny_home
  3. LEFT JOIN druzyna alias2 ON alias2.id = terminarz.id_druzyny_away
  4. LEFT JOIN kolejka ON kolejka.id = terminarz.id_kolejki
  5. LEFT JOIN druzyna druzynakolejka ON druzynakolejka.id = kolejka.id_pauza
Go to the top of the page
+Quote Post
djtomaszq
post
Post #15





Grupa: Zarejestrowani
Postów: 192
Pomógł: 0
Dołączył: 5.07.2015

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


Czyli mój błąd polegał na tym, że nie zrobiłem przypisania 4 linijki... (?)

HM a dlaczego mi nie działało jak robiłem to w WHERE kolejka.id = terminarz.id_kolejki Twóją 4 linijkę z powyższego postu ? Czy jak się JOIN używa to tylko tego trzeba?


.. i czy jest w mysql coś takiego co z powyższego zapytania wyświetli mi tylko raz jeden rekord który się powtarza?

np. w tabeli terminarz nazwa każdej kolejki pokazuje się 6 razy tak samo data no bo jest tak przypisana w bazie a chce żeby tylko wyświetliła się raz na górze potem wszytkie 6 wierszy z różnymi druzynami które grają miedzy sobą i po 6 wierszach nastepny numer kolejki i kolejne 6 wierszy itd. czy to już muszę kombinować w php z pętlami i warunkami ?

.. bo ogólnie wyświetlam wszystko tak:
  1. while($wiersz = $zapytanie->fetch_assoc()){
  2. echo $wiersz['data']."<br /> ";
  3. echo $wiersz['pauza']."<br /> ";
  4. echo $wiersz['godzina']." ".$wiersz['home']." ".$wiersz['gol_home'].":".$wiersz['gol_away']." ".$wiersz['away']."<br />";
  5. }
Go to the top of the page
+Quote Post
nospor
post
Post #16





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




Cytat
Czyli mój błąd polegał na tym, że nie zrobiłem przypisania 4 linijki... (?)
tak

Cytat
HM a dlaczego mi nie działało jak robiłem to w WHERE kolejka.id = terminarz.id_kolejki Twóją 4 linijkę z powyższego postu ? Czy jak się JOIN używa to tylko tego trzeba?
Poniewaz gdy masz kilka tabel w FROM to wszystkie tabele we FROM musza byc w nawiasie. W przeciwnym wypadku tylko ostatnia jest widziana w sekcjach JOIN

Cytat
i czy jest w mysql coś takiego co z powyższego zapytania wyświetli mi tylko raz jeden rekord który się powtarza?
Obrobka w php
http://nospor.pl/grupowanie-wynikow.html
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 13:10