Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja SUM() - chyba trudne pytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
Anba45
Na kilku forach php-MySQL znalazłem ciekawe informacje na temat funkcji SUM(). Nie jestem Herkulesem MySQLowym a zaciekawił mnie problem przedstawiony przez Krzyśka (ZERO odpowiedzi na ten temat). Chodzi o przykład segregacji dobrze przedstaiony na przykładzie JEDNEJ tabeli rozgrywek piłkarsnich gdzie jedna drużyna ("aa" lub"bb"..) występuje w dwóch kolumnach (Gospodzrze a innym razem jako Goście). Problem polega na sprytnym wyłuskaniu informacji a dużynie i uporządkowaniu danych w postaci tabeli do WWW.

Przedstawiony problem wygląda następująco:

=====cytat======================================

Mam w bazie danych "Mecze" dwie tabele:

Rozgrywki

Lp_Gosp_Goscie_Gole1_Gole2_Pkt1_Pkt2

1_aa_bb_3_1_2_0
2_aa_cc_5_2_2_0
3_cc_aa_1_4_0_2
4_dd_bb_1_1_1_1
5_ee_gg_6_4_2_0
6_gg_bb_1_5_0_2
8_bb_cc_9_3_2_0


Nazwy klubów pobierane są z bazy Kluby:

Kluby

Lp_Nazwa_IdKlubu

1_aa_1
2_cc_3
3_bb_2
4_dd_4
5_ee_5
6_ff_6
7_gg_7



Potrzebuję w wyniku tabelę na stronie WWW


Nazwa klubu_Gole u siebie_Gole na wyjeździe_Punkty u siebie_Punkty na wyjeździe_Meczy u siebie_Meczy wyjazdowych

aa_8_4_3_3_2_1
bb_9_7_2_3_1_3
cc_1_5_0_0_1_2
dd_1_NG_1_NG_1_0 ----> zamiast NG (nie grał) może być: 0

itd...



Próbowałem czegoś takiego ale to jest złe bo sumuję tylko gospodarza LUB gościa


$wynik = mysql_query ("SELECT Kluby.IdKlubu, Kluby.Nazwa, SUM(Rozgrywki.Gol1), SUM(Rozgrywki.Pkt1) FROM Rozgrywki, Kluby WHERE Kluby.IdKlubu = Rozgrywki.Gosp GROUP BY Kluby.Nazwa;") or
die ("błąd w pytaniu");


Jak to załatwić prostym poleceniem?questionmark.gif? Trzeba chyba stworzyć chwilowe dwie tabele - sam nie wiem.

Krzysiek

=====koniec cytatu======================================

Pozdrawiam
mariuszn3
A dlaczego tak bardzo ważne jest by było to jedno polecenie? Na moje oko nie da się tego zrobić jednym zapytaniem bez jakiś strasznych wygibasów (nie konieniecznie tymczasowa tabela) i myślę, że lepiej (też dla wydajności ale trzeba by to było przetesteować) by było pozostać przy dwóch.

EDIT:
A jednak.. przyszło mi do głowy coś takiego (nie sprawdzałem):
  1. SELECT k.`nazwa`,
  2. SUM(r1.`gole1`) AS 'gole_u_siebie',
  3. SUM(r2.`gole2`) AS 'gole_na_wyjezdzie',
  4. SUM(r1.`pkt1`) AS 'punkty_u_siebie',
  5. SUM(r2.`pkt2`) AS 'punkty_na_wyjezdzie',
  6. COUNT(r1.*) AS 'mecze_u_siebie',
  7. COUNT(r2.*) AS 'mecze_na_wyjezdzie'
  8. FROM `rozgrywki` AS r1
  9. INNER JOIN `kluby` AS k ON (r1.`gosp` = k.`idklubu`)
  10. INNER JOIN `rozgrywki` AS r2 ON (k.`idklubu` = r2.`goscie`)
  11. GROUP BY k.`nazwa`


EDIT2:
To jest temat na dział bazy danych a nie php.
Anba45
Dzięki - myśl jest przednia ale muszę nad tym popracować bo ciągle wywala mi błąd i coś nie mogę się dopatrzeć gdzie...
Dzięki również za przypomnienie o innym dziale forum. Dam tam również ten temat może znajdzie się inne rozwiązanie (choć to wygląda dobrze ale wymaga doszlifowania z mojej strony)....
mariuszn3
Poprawiłem jeden drobny błąd.. który na pewno wywalał mysqla.. więc na pewno teraz jest trochę lepiej smile.gif
nospor
Przenosze. na przyszlosc prosze nie duplikowac tematow
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.