Autor Zpráva
mpark
Profil
Chtěl bych v první řadě poděkovat Kajman_ovi.
Pomohl mi tady: http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=28&topic=2 6810
a tady: http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=28&topic=2 6613

Jsem teď v situaci, kdy musím co nejrychleji dodělat web fotbalového turnaje, se zaměřením na statistiky. Scripty jsem získal již rozděláné, je na mě je dodělat, ale mySQL ještě moc neumím. Proto žádám naposledy o radu jak to vyřešit. Doufám že se ozve Kajman_.:-)


Tabulka hraci:



|hracovoID| |Jmeno| |id_tymu|
| 123456 | |Franta| | 260 |
| 987654 | |Pepa | | 550 |
| 343434 | |Mojmír| | 260 |
| 565656 | |Ivoš | | 550 |


Tabulka hrac_co_hral

|IDzapasu | |hracovoID| |id_tymu| |goly| |asistent| |strelBrana| |strelMimoBrana| | nasazen_jako|
| 555555 | |123456 | | 260 | | 4 | |0 | | 5 | | 0 | | 9 |
| 555555 | |987654 | | 550 | | 0 | |0 | | 1 | | 6 | | 10 |
| 666666 | |123456 | | 260 | | 2 | |0 | | 3 | | 12 | | 9 |
| 666666 | |987654 | | 550 | | 3 | |0 | | 5 | | 1 | | 10 |
| 555555 | |343434 | | 260 | | 0 | |0 | | 0 | | 0 | | 0 |
| 666666 | |565656 | | 550 | | 0 | |0 | | 0 | | 0 | | 0 |


Tabulka zapasy

|IDzapasu | |domaci| |hoste| |golyD| |golyH|
| 555555 | |260 | | 550 | | 4 | | 0 |
| 666666 | |550 | | 260 | | 2 | | 3 |


Tabulka user

|id_tymu | |tym |
| 260 | |FC Budějovická |
| 550 | |SK Kačerov |



Tak, to je jen jako příklad. Slovy řečeno, odehrálo se vzájemné utkání mezi týmy FC Budějovická a SK Kačerov nejdřív na jednom hřišti, potom na revanč na hřišti soupeře.

Zápasy skončili jak můžeme vidět z databáze takto:

FC Budějovická : SK Kačerov - 4 : 0 Góly: 4(Franta)
SK Kačerov : FC Budějovická - 2 : 3 Góly: 2(Pepa), 3(Franta)

V bráně FC Budějovická chytá Mojmír, proto je uveden "nasazen = 0" (0 = brankář), v bráně SK Kačerov je Ivoš.

K tomu nasazení u ostatních hráčů to není tak důležité 9 může být třeba křídlo, 10 může být útočník. Důležitější je brankář - pro výpočet Statistiky brankářů.

Uspěšnost brankáře vypočítáme pomocí vzorečku Početchycenýchstřel / Početvšechstřel * 100
Početchycených střel vypočítáme strelBrana - goly v daném určitém
|IDzapasu | 
.
Jak tedy pomocí příkazů mySQL vypočíst třeba úspěšnost Mojmíra a Ivoše a ještě je umět seřadit do tabulky |Hráč| |Z Týmu| |úspěšnost v procentech|?
mpark
Profil
Aby se neřeklo, že mám vše zadarmo, přišel jsem na to, jak zobrazit brankaře s jejich týmem a počtem střel na bránu:DDD Což je nesmysl, protože brankaři nestřílí, ale už jsem blízko:

$dotaz= "select z.hracid as hrac, z.tymid, z.nasazen, d.tym tymid, h.jmeno hracid, sum(z.shoton) strel from zapas_hrac z, `user` d, `hraci` h where (z.tymid=d.id_tymu) and (z.hracid=h.hracid) and (z.nasazen='0') GROUP by h.hracid ORDER BY strel ASC LIMIT 30"; //dotaz k vypsani vsech vzkazu v databazi
$qq = mysql_query($dotaz);
print mysql_error();
while ($z = MySQL_Fetch_Array($qq)):

echo "<tr>
<td style=\"text-align:left;width:150px;\"><b>".$z["tymid"]."</b></td><td style=\"text-align: left;width:150px;\"><a href=\"http://www.mifa.cz/mifa/info_hrac.php?pid=".$z["hrac"]."\" target=\"_blank\">".$z["hracid"]."</a></td><td style=\"text-align:center;width:50px;\">".$z["strel"]."</td>
</tr>";
endwhile;


protože teď jen přijít na to, jak počet střel vyměnit za procenta - přijít na výpočet počtu jimi chycených střel kterej potom vydělím počtem všech střel na jejich tým krát sto.. Kurňa. :((
Kajman_
Profil *
No, hodně záleží na tom, jaká verze mysql tam běží (select version()).

No, můžu Vám prozdradit, že bych to viděl asi na vnořené dotazy spojené přes union. Tak zkuste, co zvládnete, protože já už dneska zvládnu akorát zachrápat :-)
mpark
Profil
Máte u mě flašku kvalitního vína.:) Verze mysql je MySQL 4.1.15. Já se na to vrhnu zítra, dnes už mě nic nenapadá. Tady je ten
web. Díky.
Kajman_
Profil *
Proto žádám naposledy o radu jak to vyřešit

Tak když je to tedy naposled, ta možná takhle nějak

select hr.Jmeno, us.tym, uspesnost.uspesnost from hraci hr, `user` us,
(select brankari.hracovoID, (sum(brankari.chycenych)/sum(brankari.strelBrana))*100 uspesnost
from
(select vypstrel.strelBrana-z.golyH as chycenych, vypstrel.strelBrana, h.hracovoID
from hrac_co_hral h, zapasy z, (select h2.IDzapasu, h2.id_tymu, sum(h2.strelBrana) strelBrana from hrac_co_hral h2 group by h2.IDzapasu, h2.id_tymu) vypstrel
where h.nasazen_jako=0
and z.IDzapasu=h.IDzapasu and z.domaci=h.id_tymu
and z.IDzapasu=vypstrel.IDzapasu and z.hoste=vypstrel.id_tymu
union all
select vypstrel.strelBrana-z.golyD as chycenych, vypstrel.strelBrana, h.hracovoID
from hrac_co_hral h, zapasy z, (select h2.IDzapasu, h2.id_tymu, sum(h2.strelBrana) strelBrana from hrac_co_hral h2 group by h2.IDzapasu, h2.id_tymu) vypstrel
where h.nasazen_jako=0
and z.IDzapasu=h.IDzapasu and z.hoste=h.id_tymu
and z.IDzapasu=vypstrel.IDzapasu and z.domaci=vypstrel.id_tymu
) brankari group by brankari.hracovoID
) uspesnost
where uspesnost.hracovoID=hr.hracovoID and hr.id_tymu=us.id_tymu order by uspesnost.uspesnost desc


Berte to spíš jako inspiraci, nemám zájem to zkoušet. No, a bude to asi pomalé, protože ty tabulky na tento výpočet nejsou optimální.
mpark
Profil
Bože to je kód. :) Vyzkouším...
mpark
Profil
Už se to rýsuje, jenom přijít na správný název týmu a jména...
Text odkazu
mpark
Profil
Tak to ukazuje procenta, ale je tam ještě jeden problémek. Vypočítá to hráče, který třeba hrál výborně, jeho tým vyhrál 10:0 a on má božskou úspěšnost 100%, ale jiný brankař hrál 20 zápasů, šlo mu to jakž takž a má úspěšnost 90%. Pro nás je jasné, že ten s 90% je lepší jak ten se 100%. chybí tam podmínka např. 50% počtu odehraných zápasů mužstva každého brankaře. šlo by toto nějak ošetřit? Pravděpodobně někam count (z.IDzapasu) nebo sum(z.IDzapasu) ???
mpark
Profil
A navíc ty procenta neodpovídají...
Kajman_
Profil *
Alespoň deset odchytaných utkání by snad šlo takhle...

) brankari having count(brankari.hracovoID)>=10 group by brankari.hracovoID

přijde mi to spravedlivější než nadpoloviční chytání.
Kajman_
Profil *
A navíc ty procenta neodpovídají...

Tak to je pech :-) Asi si to budete muset napsat sám nebo počkat na radu někoho jiného.
mpark
Profil
Můžu se zeptat kde jsme vzali tabulku brankari? Ta je nějaká virtuální? Dál by mě zajímalo, protože nesedí procenta, jak bych mohl vypsat místo ".$z["uspesnost"]." % spíš počet chycených/vypálených pro kontrolu kde je chyba.... Takhle ".$z["chycenych"]."/".$z["vypstrel"]." mi to nic nevypíše.
Kajman_
Profil *
Jejkote nalaďte sql v php, ale v aplikaci na to určené... pma, mysql query,...

brankari je pojmenovany vnoreny select

Možná bude lepší, když si o mysql něco přečtete ;-)
mpark
Profil
Není špatně syntaxe?

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group by brankari.hracovoID ) uspesnost where uspesnost.hracovoID=hr.hracovoID and hr.t' at line 15
mpark
Profil
Jejkote nalaďte sql v php, ale v aplikaci na to určené... pma, mysql query,...

No samozřejmě že to dělám přes mysql query :D Nedal jsem sem celej kód.;)
Kajman_
Profil *
Není špatně syntaxe?

Pardon, having samozřejmě až po group by.

No samozřejmě že to dělám přes mysql query

Jo, přes mysql_query ale já měl na mysli program MySQL Query Browser.
mpark
Profil
Tak teď to nevypsalo pro jistotu nic. Bez erroru, ale nic.:) Už jste se s tím dost natrápil, moc vám děkuju, kam mám zaslat to vínko?:d Když jsme u toho čtení nečtení, netvrdím že sql ovládám, jakou literaturu byste mi doporučil? Mám knihu PHP a MySQL - Rozvoj webových aplikací od Luke Welling a Laury Thomson - vydal SoftPress. Koska spoustu lidí haní. Z čeho jste čerpal vy?
mpark
Profil
Stáhnul jsem si MySQL Query Browser. Jméno a heslo je mi jasné, jsou to logovací údaje do mysql, ale nemůžu se připojit. Co by mělo být v Stored connection a Server host? Připojuju se na isol.cz V obou případech jsem zadal mysql.isol.cz což je normálně funkční, ale přes Browser mi vypíše hlášku MySQL Error number 2003 že se nemůžu připjit k serveru mysql.isol.cz '10054'
Kajman_
Profil *
Tak teď to nevypsalo pro jistotu nic. Bez erroru, ale nic.:)

A odchytal nějaký brankář alespoň 10 zápasů?

Z čeho jste čerpal vy?

Hodně lidí doporučuje v češtine seriál na linuxsoftu...
http://www.linuxsoft.cz/article.php?id_article=731

Já mám raději manuál...
http://dev.mysql.com/doc/refman/4.1/en/index.html
Kajman_
Profil *
MySQL Error number 2003

Asi není povolené se na ten server připojit z Vašeho počítače. Tak to snad mají alespoň na webu phpmyadmina.
mpark
Profil
Máte pravdu, neodehráli ještě 10 zápasů, dal jsem 5 a vypsalo to dobře, ale je chyba ve výpočtu. Zkusím na to přijít sám. Moc vám děkuju.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0