Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Tabela sportowa, skomplikowane zapytanie sql
Stef@n
post 28.12.2008, 16:49:47
Post #1





Grupa: Zarejestrowani
Postów: 191
Pomógł: 3
Dołączył: 14.08.2003

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


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
Go to the top of the page
+Quote Post
memory
post 28.12.2008, 19:27:08
Post #2





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


moglbys pokazac jak ma wygladac koncowa tabela
Go to the top of the page
+Quote Post
kefirek
post 28.12.2008, 19:53:44
Post #3





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


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;
Go to the top of the page
+Quote Post
SzamanGN
post 28.12.2008, 21:41:19
Post #4





Grupa: Zarejestrowani
Postów: 94
Pomógł: 14
Dołączył: 11.10.2007

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


Odpowiedź podałem w tym forum.


--------------------
SzamanGN
Go to the top of the page
+Quote Post
Stef@n
post 29.12.2008, 00:05:31
Post #5





Grupa: Zarejestrowani
Postów: 191
Pomógł: 3
Dołączył: 14.08.2003

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


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
Go to the top of the page
+Quote Post
kefirek
post 29.12.2008, 08:50:52
Post #6





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


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;
Go to the top of the page
+Quote Post
Stef@n
post 29.12.2008, 10:44:39
Post #7





Grupa: Zarejestrowani
Postów: 191
Pomógł: 3
Dołączył: 14.08.2003

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


ehh nie zlicza sumy punktów bramek itp oraz nie wyswietla sie druzyna która nie grała zadnego meczu u siebie ;/
Go to the top of the page
+Quote Post
drucik
post 31.12.2008, 02:34:26
Post #8





Grupa: Zarejestrowani
Postów: 13
Pomógł: 4
Dołączył: 31.12.2008
Skąd: Bytom Odrzański

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


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

Ten post edytował drucik 31.12.2008, 02:43:22


--------------------
"If I load this gun, would you hold in your heart and give your life for love?"
http://www.mzalewski.net/
Go to the top of the page
+Quote Post
SzamanGN
post 31.12.2008, 10:08:24
Post #9





Grupa: Zarejestrowani
Postów: 94
Pomógł: 14
Dołączył: 11.10.2007

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


Odpowiedź udzielona w tym forum


--------------------
SzamanGN
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:38