Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tabela sportowa
Forum PHP.pl > Forum > Bazy danych > MySQL
Stef@n
Witam,
Proszę was o pomoc. Próbuje jednym zapytaniem wyciągnąć z terminarza sportowego wszystkie wyniki które będzie tworzyć tabele rozgrywek.

Baza wygląda tak:
  1. CREATE TABLE `mecze` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `druzyna_a` varchar(20) NOT NULL DEFAULT '0',
  4. `druzyna_b` varchar(20) NOT NULL DEFAULT '0',
  5. `g_a` int(11) NOT NULL DEFAULT '0',
  6. `g_b` int(11) NOT NULL DEFAULT '0',
  7. `p_a` int(11) NOT NULL DEFAULT '0',
  8. `p_b` int(11) NOT NULL DEFAULT '0',
  9. PRIMARY KEY (`id`)
  10. ) TYPE=MyISAM AUTO_INCREMENT=7 ;
  11.  
  12.  
  13. INSERT INTO `mecze` VALUES (1, 'druzyna_1', 'druzyna_2', 7, 2, 3, 0);
  14. INSERT INTO `mecze` VALUES (2, 'druzyna_3', 'druzyna_4', 5, 5, 1, 1);
  15. INSERT INTO `mecze` VALUES (3, 'druzyna_1', 'druzyna_3', 6, 5, 2, 1);
  16. INSERT INTO `mecze` VALUES (4, 'druzyna_2', 'druzyna_4', 3, 0, 3, 0);
  17. INSERT INTO `mecze` VALUES (5, 'druzyna_1', 'druzyna_4', 5, 4, 3, 0);
  18. INSERT INTO `mecze` VALUES (6, 'druzyna_2', 'druzyna_3', 4, 2, 3, 0);

kolumny: bramki strzelone w meczu przez Gospodarzy (g_a) i gosci (g_b), tak samo kolumny p_a i p_b to kolumny z punktami (czyli zwycięstwo, wygrana, remis).

Teraz mam dwa zapytania jedno robi tabele rozgrywek gdzie zlicza mecze rozgrywane w domu (GROUP BY druzyna_a) drugie zapytanie zlicza mecze rozegrane na wyjeździe (GROUP BY druzyna_b):
Zapytanie I - zlicza mecze w domu
  1. SELECT druzyna_a, COUNT(druzyna_a) AS mecze, SUM(p_a) AS punkty, SUM(g_a) AS strzelone, SUM(g_b) AS puszczone
  2. FROM mecze GROUP BY druzyna_a ORDER BY punkty DESC


Zapytanie II - zlicza mecze na wyjeździe
  1. SELECT druzyna_b, COUNT(druzyna_b) AS mecze, SUM(p_b) AS punkty, SUM(g_b) AS strzelone, SUM(g_a) AS puszczone
  2. FROM mecze GROUP BY druzyna_b ORDER BY punkty DESC


Teraz opisze mój problem potrzebuje aby te dwa zapytania tworzyły całość. Czyli tabele ze wszystkich meczów rozgrywanych w domu i na wyjeździe.

Proszę o pomoc w zrobieniu takiego zapytania!

POZDRAWIAM
memory
moglbys pokazac jak ma wygladac koncowa tabela
kefirek
Na chwile obecną zrobilem tyle pokazuje mecz ile meczy u siebie ile na wyjedzie, gole zdbyte u siebie i gole zdobyte na wyjedzie
  1. SELECT a.druzyna_a, COUNT(a.druzyna_a) AS domu,
  2. (SELECT COUNT(b.druzyna_b) FROM mecze b WHERE (b.druzyna_b=a.druzyna_a)) AS wyjazd,
  3. SUM(g_a) AS liczbaGoli,
  4. (SELECT SUM(c.g_b) FROM mecze c WHERE (c.druzyna_b=a.druzyna_a)) AS liczbaGoliNAWYZJEDZIE
  5. FROM mecze a GROUP BY a.druzyna_a;
SzamanGN
Odpowiedź podałem w tym forum.
Stef@n
Cytat(memory @ 28.12.2008, 21:27:08 ) *
moglbys pokazac jak ma wygladac koncowa tabela

Tabela końcowa ma wyglądać tak!
Druzyna | Mecze | Punkty | Strzelone | Puszczone
druzyna_1 | 3 | 8 | 18 | 11
druzyna_2 | 3 | 6 | 9 | 9
druzyna_3 | 3 | 2 | 12 | 15
druzyna_4 | 3 | 1 | 10 | 12

Taki ma być efekt końcowy!

Do Kefirek i SzamanGN. Chodzi o sumę obu tabel (mecze wyjazd+dom) a nie pokazanie wszystkich wyników razem.


Pozdrawiam
kefirek
Chyba o to chodzi
  1. SELECT a.druzyna_a, COUNT(a.druzyna_a) +
  2. (SELECT COUNT(b.druzyna_b) FROM mecze b WHERE (b.druzyna_b=a.druzyna_a)) AS Mecze,
  3. SUM(a.p_a) + (SELECT SUM(c.p_b) FROM mecze c WHERE (c.druzyna_b=a.druzyna_a)) AS Punkty,
  4. SUM(a.g_a) + (SELECT SUM(d.g_b) FROM mecze d WHERE (d.druzyna_b=a.druzyna_a)) AS Strzelone,
  5. SUM(a.g_b) AS puszczone
  6. FROM mecze a GROUP BY a.druzyna_a;
Stef@n
ehh nie zlicza sumy punktów bramek itp oraz nie wyswietla sie druzyna która nie grała zadnego meczu u siebie ;/
drucik
Witam,

Ciężko byłoby zrobić to w jednym zapytaniu. Może pomoże Ci wersja, która buduje taką tabelkę używając dwóch zapytań do bazy:
  1. CREATE TABLE mecze_tmp(druzyna VARCHAR(20), mecze INTEGER, punkty INTEGER, strzelone INTEGER, puszczone INTEGER);
  2.  
  3.  
  4. INSERT INTO mecze_tmp SELECT a.druzyna_a,
  5. COUNT(a.druzyna_a) + COALESCE((SELECT COUNT(b.druzyna_b) FROM mecze b WHERE b.druzyna_b = a.druzyna_a), 0) AS mecze,
  6. SUM(a.p_a) + COALESCE((SELECT SUM(b.p_b) FROM mecze b WHERE b.druzyna_b = a.druzyna_a), 0) AS punkty,
  7. SUM(a.g_a) + COALESCE((SELECT SUM(b.g_b) FROM mecze b WHERE b.druzyna_b = a.druzyna_a), 0) AS strzelone,
  8. SUM(a.g_b) + COALESCE((SELECT SUM(b.g_a) FROM mecze b WHERE b.druzyna_b = a.druzyna_a), 0) AS puszczone
  9. FROM mecze a
  10. GROUP BY a.druzyna_a;
  11.  
  12. INSERT INTO mecze_tmp SELECT a.druzyna_b,
  13. COUNT(a.druzyna_b) + COALESCE((SELECT COUNT(b.druzyna_a) FROM mecze b WHERE b.druzyna_b = a.druzyna_a), 0) AS mecze,
  14. SUM(a.p_b) + COALESCE((SELECT SUM(b.p_a) FROM mecze b WHERE b.druzyna_b = a.druzyna_a), 0) AS punkty,
  15. SUM(a.g_b) + COALESCE((SELECT SUM(b.g_a) FROM mecze b WHERE b.druzyna_b = a.druzyna_a), 0) AS strzelone,
  16. SUM(a.g_a) + COALESCE((SELECT SUM(b.g_b) FROM mecze b WHERE b.druzyna_b = a.druzyna_a), 0) AS puszczone
  17. FROM mecze a
  18. WHERE a.druzyna_b NOT IN (SELECT druzyna FROM mecze_tmp) GROUP BY a.druzyna_b;
  19.  
  20.  
  21. SELECT * FROM mecze_tmp;


Tak ogólnie to pierwsze zapytanie to tworzenie tabelki na wyniki, a ostatnie wyświetla wyniki z tabelki. smile.gif
SzamanGN
Odpowiedź udzielona w tym forum
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.