Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z LEFT JOIN oraz warunkami WHERE
czerwus
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 1.04.2016

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


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ć :/

Ten post edytował czerwus 2.04.2016, 01:12:29
Go to the top of the page
+Quote Post
LowiczakPL
post
Post #2





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

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


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


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
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 - 15:50