Mohl by mi někdo poradit jak bych nejlépe mohl vytvořit strukturu tabulek, když
bych chtěl aby se mi zobrazovalo počet výher, proher, a remíz u jednotlivých
týmů, počet inkasovaných a vstřelených branek a také bych chtěl aby se mi
zobrazovali střelci u jednotlivých týmu, kteří dali gola. napadá někoho jak by
se to dalo vytvořit
Fórum › MySQL
Fotbalová statistika
Nejdriv se zamysli a zkus neco navrhnout sam, my ti to pomuzeme opravit/vylepsit. Lidi udelejte-to-pekne-prosim-za-me tady nikdo rad nema.
To CommanderZ :
přemýšlel jsem nad tímto
tabulka utkání
id
domaci_tym
hostujici_tym
vysledek_domaciho_tymu
vysledek_hostujiciho_tymu
body_domaci
body_hoste
a pak tabulka
utkani_detail
id_utkani
domaci_tym
hostujici_tym
domaci_strelci
hostujici_strelci
mas taku dost vseobecnu otazku. tie tvoje poziadavky sa daju splnit aj ked to bude navrhnute zle (struktura). Na tvojom mieste by som si dobre rozmyslel na co vsetko budes databazu pouzivat, ake data ukaladat, typ db atd.... usetris si pracu s tym ze to nebudes musiet prerabat koli tomu ze si nieco zabudol.
1) Udelej si tabulku tymy, ve ktere bude ID tymu, nazev tymu a pripadne nejake dalsi podrobnosti
2) Moc nechapu to utkani_detail. Udelej si treba tabulku goly se sloupci gol_id, zapas_id, strelec_id, cas a buh vi co jeste. To samozrejme budes potrebovat jeste tabulku strelcu (nebo treba misto toho tabulku hraci, to by vyslo nastejno).
ja by som si urobil asi taketo tabulky:
1. tymi
- id, info o tyme .atd....
2. hraci
- id, meno, id tymu atd....
3. zapasy
- idcka tymov co hraju a dalsie veci co tam chces
4. goly
- tu co potrebujes mat...hlavne id hraca
len taky veeeeelmi strucne a moj navrh ale ja neviem co tam vlastne vsetko chces mat.
Tady jsou v zasade dve reseni - bud to pokazde znova spocitat (informace o golech mas uz v tabulce goly!) nebo si nekam ukladat integer s poctem golu - to je rychlejsi ale musis se starat o obnoveni tohoto poctu kdykoliv se tabulka goly zmeni.
To CommanderZ : jj..máš pravdu jsou tam id_hračů, můžu zjistit do kterého týmu patří a pak dodle toho sečíst ale jak na goly které tým obdrží. Jedině ukladat do tabulky zapasy počty golu u domacího a hostujícího celku a pak také body které za zápas dostanou.
Pocet obrzenych golu zjistit muzes, protoze vis, mezi kterymi tymy zapas probihal a taky vis, k jakemu zapasu ktery gol patri.
To CommanderZ : ted zkusím navrhnout konečnou verzi té tabulky
1. tymi
- id, nazev_tymu
2. hraci
- id, meno hrace, id tymu, oceneni
3. zapasy
- idcka tymov co hraju a dalsie veci co tam chces
4. goly
- id hrace,id zapasu, pocet_golu
jsou ještě nějaké návhry ?
4. goly
- id hrace,id zapasu, pocet_golu
Co pocet golu? Melo by platit 1 gol = 1 zaznam. Takze kdyz da 1 hrac v 1 zapase vice golu, tak bude proste pritomno vice zaznamu.
To CommanderZ : jj..máš pravdu já jsem přemýšlel tak
že bych měl zaškrkávací checboxy u každého hráče a pak vedle toho input do kterého by se psalo počet golů, poté bych odeslal id hráče + jeho počet golů. ale máš rpavdu...v tom co říkáš.
a ještě bych se chtěl zeptat jak by se řešilo zapisování bodů..ty asi zapisovat do tabulky tymy ..že ?
ještě mi trošku není jasné když budu generovat celkovou tabulku kde bude skoré jednotlivých týmů, zda mi bude stačit tabulka goly nebo musím zapisovat skore jednotlivých zápasu do tabulky zapasy. Možná má hloupé dotazy ale s touto problematikou nemám dosud žádné zkušenosti
Pocitat skore by slo rovnez pomoci informaci o golech, bylo by to uz dost komplikovane. Nejlepsi bys asi mel ukladat celkove skore bud ke kazdemu tymu (jestli bude v databazi jen jeden turnaj) nebo k jednotlivym zapasum a pak to scitat (nebo se nabizi treba reseni ukladat ID viteze - bylo by tam ID vitezneho tymu nebo 0/NULL v pripade remizy).
To CommanderZ :
ale já bych právě potřeboval mít přehled o odehraných zápasech proto se nabízí možnost ukládat skore k jednotlivým zápasům, al enevím jak spočítat body a skore pokud jednou bude tým jako domací a podruhé jako hostující
struktura tabulky zaápasy
id_zapasu
id_domaci
id_hostujici
dom_vysledek
host_vysledek
dom_body
host_body
nevíš zda by to šlo vyřešit nějak jednoduššeji
Ono si musis uvedomit, ze v MySQL jsou dve jednoduseji:
1) Z pohledu tabulky - tabulku maji mene policek a vice dat se dopocitava na zaklade ruznych zavislosti a tak
2) Z pohledu dotazu - tabulky maji vice policek, ale dotazy jsou vyrazne jednodussi. Toto reseni byva vyrazne rychlejsi co se tyce casu zpracovani v databazi, ale zase musis neustale hlidat konzistanci dat a dukladne vsechna policka aktualizovat pri kazde zmene.
Mezi temito dvema pristupy si musis vybrat sam - nejlepsi je ale nejit si svoji zlatou stredni cestu a cacheovat to, co by bylo z hlediska vypocetniho casu neunosne CPU nakladne nebo neunosne slozite pro tebe.
To CommanderZ :
nakonec jsem to vyřešil že mám dvě tabulky..
include "connect.php";
$kolo=$_POST['kolo'];
$sezona=$_POST['sezona'];
$domaci=$_POST['id_domt'];
$hostujici=$_POST['id_hostt'];
$dom_vysledek=$_POST['dom_vysledek'];
$host_vysledek=$_POST['host_vysledek'];
if($dom_vysledek <$host_vysledek )
{
$body_h=3;
$body_d=0;
}
elseif($dom_vysledek >$host_vysledek )
{
$body_h=0;
$body_d=3;
}
else{
$body_h=1;
$body_d=1;
}
mysql_query("insert into system_zapasy values('','$kolo','$domaci','$hostujici','$dom_vysledek','$host_vysledek','$sezona')") or die (mysql_error());
//domácí
mysql_query("update system_tymy set zapasy=zapasy+1, body=body+$body_d,vg=vg+$dom_vysledek,og=og+$host_vysledek where id='$domaci'") or die (mysql_error());
//hoste
mysql_query("update system_tymy set zapasy=zapasy+1, body=body+$body_h,vg=vg+$host_vysledek,og=og+$dom_vysledek where id='$hostujici'")or die (mysql_error());
ale lámu si hlavu s tím jak zapisovat výhry prohry a remízy
Zase jsme u toho - vyhra/prohra/remiza jse svym zpusobem zapsana ve skore zapasu. Pri kazdem cteni by jsi ale musel pouzit nekolik IF podminek nebo jeden CASE (tak jako tak byses dopatlal k SQL dotazum nekolik radkum dlouhym).
Uz jsem ti tu ale doporucoval ukladat do te tabulky zapasy sloupec vitez_id kde bude id vitezneho tymu nebo NULL v pripade remizy.
myslis celkovy pocet bodu ebop vyher?
Celkovy pocet bodu zapasu pro tym 123 by byl
SELECT COUNT(*) from zapasy where vitez_id=123
A celkovy pocet bude uz je trochu slozitejsi
SELECT SUM(
IF(vitez_id=123,3,IF(vitez_id IS NULL,1,0))
) FROM zapasy WHERE domaci_tym_id=123 OR hostujici_tym_id=123
K tomu na vyhry si radsi dopln jeste tohle
AND (domaci_tym_id=123 OR hostujici_tym_id=123)
prohry - vsechny zapasy kde tym 123 hral, ale nevyhral a vitez neni null
SELECT COUNT(*) from zapasy where vitez_id!=123 and vitez_id IS NOT NULL and (domaci_tym_id=123 OR hostujici_tym_id=123)
remizy - zapasy kde tym hral a vitez je null
SELECT COUNT(*) from zapasy where vitez_id IS NULL and (domaci_tym_id=123 OR hostujici_tym_id=123)
A priste nez se zeptas, tak zkus chvili premyslet, tohle byla jen jdnoducha uprava toho na vyhry!
To Paja2 : ještě jeden dotázek: nevím jak vytáhnout názvy týmů...výtáhnout třeba jen název domácích týmů není problém ale nevím jak zároven vytáhnout domácí a hostující
<?
$sql=mysql_query("select * from system_zapasy t1 join
system tymy t2 on t1.id_domt=t2.id ") or die (mysql_error());
while($row=mysql_fetch_assoc($sql)){
print_r($row);
$id_doma=$row["id_domt"];
$domaci_tym=$row["tym"];
echo "<tr><td>".$domaci_tym."</td><td>".$row["dom_vysledek"]."</td><td>".$row["host_vysledek"]."</td><td>".$hostujíci_tym."</td></tr>";
}
?>
Musis pouzit aliasy
SELECT domaci.jmeno, hoste.jmeno FROM zapasy JOIN tymy AS domaci JOIN tymy AS hoste WHERE zapasy.domaci_tym_id=domaci.id and zapasy.hostujici_tym_id=hoste.id
Paja2 ...podla mna by si si mal pozriet nieco o databazach a nieco o SQL. Nie ze by mi to vadilo ze sa to tu ubera tak, ze CommanderZ to robi v podstate vsetko za teda, ale ide o to sa nieco nove naucit. Takto len vyriesis problem ktory mas a dalsi budes musiet zase hladat riesenie, pytat sa alebo sa to nakoniec aj tak naucis.
tu ma napadol jeden easy tutor na sql
http://www.w3schools.com/sql/default.asp
neber to tak ze ta krituzujem, ale je lepsie sa trochu do toho dostat....usetris si vela casu a prerabania.
On je problem v tom, ze se MySQL uci na pomerne komplexnim priklade s nekolika zasadnimi zadrhely. Na zacatek je proste lepsi delat neco jednodussiho. Myslim ze tak, aby mohl sam vymyslet to co jsem mu napsal, se MySQL za tyden opravdu nenauci i kdyby sebevic chtel.
no jo. ja som mal na mysli cisto dotazovaci jazyk...v tomto pripade SQL...nemyslel som dake zakutia konkretne MySQL. Myslim ze vseobecne zaklady o databazach a SQL jazyj by mu pomohli.
ale na druhej strane mas pravdu ze za par dni to asi tazko zvladne.
To duchan :
Mohl bys mi poradit jak, upravit kod tak aby se mi týmy vypsali jen jednou, ke každému týmu načítám hráče a tým se vždy opakuje podle počtu hráčů, zkoušel jsem distinct i group ale to mi nějak nefunguje.
$sql2=mysql_query("select hrd.id_hrace,hrd.jmeno as domacihraci,id_utkani,id_domt, d.tym as tym1,h.tym as tym2, dom_vysledek, host_vysledek
FROM system_zapasy z
LEFT JOIN system_tymy d ON z.id_domt = d.id
LEFT JOIN system_tymy h ON z.id_hostt= h.id
LEFT JOIN system_hraci hrd ON z.id_domt=hrd.id_tymu
LEFT JOIN system_hraci hrh ON z.id_hosst=hrd.id_tymu where z.id_utkani='$utkani' group by id_utkani")
or die (mysql_error());
1) Nepouzivej tak kratke aliasy. to je pak jako to cist v morseovce.
Jak muzes vypisovat kazdy tym jen jedno kdyz chces ziskat i vsechny hrace? Na groupovanych sloupich/tabulkach muzes provadet jen agregatni funkce, rozhodne se je nemuzes snazit ziskat.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Fotbalová tabulka ve VB — založil Ricci
Statistika — založil Pepa
Statistika — založil liborb
Statistika návštěvnosti — založil filip
Štatistika - strany — založil Lovec
Moderátoři diskuze