Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z LEFT JOIN oraz warunkami WHERE
Forum PHP.pl > Forum > Bazy danych > MySQL
czerwus
Witam Panowie. Od razu uprzedzam, że w MySQL jestem świeżakiem ale ambitnym.
Mam tabelę players a w niej kolumny || nr | player_id | team_id | zawodnik | sezon | pkt || - indeksy mogą się powtarzać, są to linijki statystyczne graczy każdego meczu w sezonie, więc dla każdego player_id istnieje kilka rekordów.
Mam również drugą tabelę druzyny a w niej kolumny || team_id | team_name | sezon || - tu również indeksy się powtarzają ale nie ma dwóch identycznych rekordów. Po prostu różne drużyny w różnych sezonach miały różne nazwy. Id drużyny się nie zmienia, ale nazwa tak w zależności od sezonu.

I teraz chciałbym z tabeli players wyciągnąć sumy zdobywanych punktów dla poszczególnych graczy w wybranym sezonie (na przykładzie 2015/2016) Z tym sobie jeszcze radzę przez polecenie
  1. SELECT SUM(players.pkt), players.player_id, players.team_id, players.sezon ,players.nr, players.zawodnik FROM players WHERE sezon='2015/2016' GROUP BY player_id ORDER BY SUM(players.pkt) DESC LIMIT 30


I działa wyśmienicie, tak jak tego oczekuję. smile.gif Chciałbym teraz aby do każdego player_id oraz przypisanemu mu team_id dopisane zostało team_name wyciągnięte z tabeli druzyny a odpowiadające team_id które jest przypisane do player_id w tabeli players przy czym aby pobierało nazwę z odpowiedniego sezonu.

Próbowałem kombinować
  1. SELECT SUM(players.pkt), players.player_id, players.team_id, players.sezon ,players.nr, players.zawodnik, druzyny.team_name FROM players LEFT JOIN druzyny ON (druzyny.team_id=players.team_id) WHERE sezon='2015/2016' GROUP BY player_id ORDER BY SUM(players.pkt) DESC LIMIT 30
ale niestety wyskakuje mi komunikat Trying to get property of non-object i już nie mam pomysłu co z tym zrobić :/
LowiczakPL
Powodem może jest brak konsekwencji w deklaracji nazw łączonych tabel, brak nazw tabel w WHERE, GROUP oraz ORDER.

łatwiej ogarniesz kod stosując aliasy nazw, AS to alias = zamiennik długich nazw = skrót

  1. SELECT
  2. SUM(P.pkt) AS suma_pkt, P.player_id, P.team_id, P.sezon ,P.nr, P.zawodnik, D.team_name
  3. FROM
  4. players AS P
  5. LEFT JOIN
  6. druzyny AS D ON (D.team_id = P.team_id)
  7. WHERE
  8. D.sezon='2015/2016'
  9. GROUP BY P.player_id
  10. ORDER BY suma_pkt
  11. DESC LIMIT 30
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.