Autor Zpráva
frankie
Profil *
Ahoj

Rád bych na web vypsal klasickou fotbalovou tabulku:

jméno týmu | výhry | prohry | remízy | body

V mysql mám dvě tabulky jednu klasickou s týmy druhou se zápasy s atributy: id_zapasu, domaci, hoste, goly_domaci, goly_hoste.

Lze nějakým způsobem sloučit do jednoho dotazu MySQL dotazy typu:

SELECT jmeno_tymu, count ( id_zapasu ) as vyhry FROM tymy, zapasy WHERE ...podmínka vízězství GROUP BY jmeno_tymu

SELECT jmeno_tymu, count ( id_zapasu ) as prohry FROM tymy, zapasy WHERE ...podmínka prohry GROUP BY jmeno_tymu

SELECT jmeno_tymu, count ( id_zapasu ) as remízy FROM tymy, zapasy WHERE ...podmínka remízy GROUP BY jmeno_tymu

... a tím získat větší část výše zmiňované tabulky.

Nebo je lepší vytvořit dočasnou tabulku s atributy jméno týmu, výhry, prohry, remízy a body a tuto tabulku několika dotazy naplnit daty.

Ještě je samozřejmě možnost vytvořit 3 - 4 dotazy a pomocí php pak srovnat týmy do tabulky i s jejich statistikou, ale to mi nepřijde zrovna 2x "elegantní" a reději bych, aby většinu práce odvedla databáze.
Kajman_
Profil *
zkuste něco jako

select t.nazev,
       count(*) as zap,
       sum(vitezstvi) as vi,
       sum(remiza) as re,
       sum(prohra) as pr,
       sum(golyp) as gp,
       sum(golym) as gm,
       sum(golyp) - sum(golym) as pm,
       sum(vitezstvi) * 3 + sum(remiza) as body
from   (select domaci as tym,
               goly_domaci as golyp,
               goly_hoste as golym,
               if(goly_domaci > goly_hoste, 1, 0) as vitezstvi,
               if(goly_domaci = goly_hoste, 1, 0) as remiza,
               if(goly_domaci < goly_hoste, 1, 0) as prohra
        from   zapasy
        union all
        select hoste as tym,
               goly_hoste as golyp,
               goly_domaci as golym,
               if(goly_domaci < goly_hoste, 1, 0) as vitezstvi,
               if(goly_domaci = goly_hoste, 1, 0) as remiza,
               if(goly_domaci > goly_hoste, 1, 0) as prohra
        from   zapasy) tmp
left   join tymy t on (tmp.tym = t.id)
group  by tym
order  by body desc, pm desc, gp desc
frankie
Profil *
Díky moc !!!

Funguje je to skvěle!

Ještě se kouknu do mysql manuálu a zjistím proč:) Dost těch věcí je pro mě nových např. SELECT něco FROM (SELECT .... ) a union all.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0