Autor Zpráva
Míra
Profil *
Zdravím,

v jednom příspěvku jsem našel radu od Kajmana, jak sčítat data z databázové tabuky podle duplicitních záznamů. Zkoušel jsem si ji zabudovat do mého skriptu, ale něco mám špatně. Potřebuji sečíst data ze sloupce "body" podle "družstev" a "ročníků"

Mám tabulky vysledky, druzstva, rocniky
v tabulce vysledky jsou např. idv, iddruzstvo, idrocnik, body
1 1 1 10
2 2 1 15
3 2 1 10
4 1 2 5
v tabulce druzstva jsou idd, druzstvo
1 Roudnice
2 Litoměřice
v tabulce rocniky jsou ids, rocnik
1 2006
2 2007

Potřebuji sečíst body tak, aby se při otevření jednotlivého ročníku zobrazil u každého družstva celkový počet bodů dosažený v tom určitém ročníku

Příklad: otevřu stránku s ročníkem 2006 (ids=1) a na ní se objeví tabulka
Roudnice (iddruzstvo=1) 10 bodů
Litoměřice (iddruzstvo=2) 25 bodů

Mně se pořád sčítají všechny body ze všech ročníků dohromady:

$celkem = mysql_query("select count(v.idrocnik), sum(v.body) body, d.druzstvo as druzstvo from vysledky as v,druzstva as d,rocniky as r where (v.iddruzstvo=d.idd) and (v.idrocnik=r.ids) group by d.idd order by body desc");

Můžete poradit? Díky
MzM
Profil
select
r.rocnik,
sum(v.body) body,
d.druzstvo

from vysledky as v
join druzstva as d v.iddruzstvo=d.idd
join rocniky as r v.idrocnik=r.ids

group by d.idd, r.ids
order by body desc

nevyzkoušené, ale mohlo by fungovat.
Míra
Profil *
Děkuji za radu, ale jelikož s php začínám a "join" vidím poprvé, můžeš mi prosím napsat jakou to má syntaxi? Vyhazuje mi to chybu s SQL syntaxi. Díky
Míra
Profil *
Tak jsem něco zkusil a už mi to rozděluje součty podle ročníků, ale další problém je v tom, že mi to vyhodí dvounásobek součtu:

$celkem = mysql_query("select count(v.idrocnik), sum(v.body) body, d.druzstvo as druzstvo from vysledky as v,druzstva as d,rocniky as r where (v.iddruzstvo=d.idd) and and v.idrocnik='".$GLOBALS["rocnik"]."' group by d.idd order by body desc");
Míra
Profil *
Tak ještě změna přidal jsem ještě order by r.ids a vypisuje mi to jeden údaj dvakrát

$celkem = mysql_query("select count(v.idrocnik), sum(v.body) body, d.druzstvo as druzstvo from vysledky as v,druzstva as d,rocniky as r where (v.iddruzstvo=d.idd) and and v.idrocnik='".$GLOBALS["rocnik"]."' group by d.idd,r.ids order by body desc");
Míra
Profil *
Tak už to mám :) přidal jsem ještě v.idrocnik=r.ids

$celkem = mysql_query("select count(v.idrocnik), sum(v.body) body, d.druzstvo as druzstvo from vysledky as v,druzstva as d,rocniky as r where (v.iddruzstvo=d.idd) and (v.idrocnik=r.ids) and v.idrocnik='".$GLOBALS["rocnik"]."' group by d.idd,r.ids order by body desc");

Můžete to tu zavřít, ať už tady nespamuju ;)
MzM
Profil
ten join je takové (podle mě) zpřehlednění, pravděpodobně se pak selecty lépe optimalizují a jsou rychlejší. Např
select *
from a, b
where a.id = b.fid

je to samé jako

select *
from a
join b on a.id = b.fid

---
join pak má ještě používané varianty (left join, right join) např

select *
from a
left join b on a.id = b.fid

odpovídá

select *
from a, b
where a.id = b.fid or b.fid is null

atp zbytek viz google a standardy sql např http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
Toto téma je uzamčeno. Odpověď nelze zaslat.