Výpočet průměru na každém řádku tabulky
- boneofsin
- Člen | 25
Ahoj, současný problém, který řeším je asi takový…
Tabulka v šabloně vypisuje řádky z dat. tabulky User kde je jméno uživatele a počet vítězství (fce. count()) z dat. tabulky Game.
Chci do každého řádku přidat hodnotu, která bude zásvislá na ID uživatele v řádku a výslednou hodnotou bude průměr.
Průměr chci spočítat z následujících hodnot:
součet bodů určitého uživatele z tabulky Score / počet her z tabulky
Game ve kterých je ID určitého hráče uvedeno
Asi bude nejlepší vytvořit komponentu, která toto bude počítat. Dalším problémem bude že je více typů her a průměry by se měli vztahovat k jednotlivému typu hry zvlášť.
Máte nějaký nápad jak to pojmout abych se dobral k požadovanému výsledku?
Představuji si že do Presenteru přidám řádek k renderDefault, kde už mám volání funkce pro výpis všech hráčů z PlayerRepository. Ale jak předat té další funkci jako parametr ID právě vypisovaného uživatele v šabloně? aby pro něj mohl být spočítán průměr pro hru typu 1 a pro hru typu 2..
- wb2009
- Člen | 125
a co to udělat přímo dotazem? s využití joinu a agregačních funkcí count a sum?
něco jako:
select U.id, (sum(S.points)/ count(G.games)) as avg from dbo.users U
left join dbo.score S on S.user_id=U.id
left join dbo.game G on G.user_id=U.id
je to jen ukázka, nevím jak máš navržené tabulky, ale tak bych to asi řešil já…
- boneofsin
- Člen | 25
Zkusil jsem něco napsat přímo do šablony a funguje to =) tak pro představu vidíte co asi chci vytvořit.. v tomto případě, ale šablona vypisuje i hodnoty $jp a $gam… což nepotřebuji chci pouze výlsedek $gp..
{foreach $players as $player}
<tr>
<td><a href="{plink Player:card id=>$player->id}">{$player->fname} {$player->lname}</a></td>
<td>{$player->related('game','win')->count('*')}</td>
{$jp = $player->related('score','player_id')->sum('jp')}
{$gam = $player->related('game','player_one')->count('*') + $player->related('game','player_two')->count('*')}
<td>{$gp = $jp / $gam}</td>
</tr>
{/foreach}
- boneofsin
- Člen | 25
Jasný… díky..
A nemáte někdo tušení jak pro tuto funkci napsat model-komponentu?
Výpis všech hráčů a vedle jmen pak celkový průmer pro každý
typ her..
DB:
*player, discipline (kde jsou druhy her), game (odehrané hry), score (body
každého hráče pro jednotlivé hry v tab game)
Player: ID, name
Discipline: ID, name
Game: ID, id_discipline, player_one (id), player_two (id)
Score: ID, game_id, player_id, score*
Výsledek: např.
Novák – disciplina1 3,25; disciplina2 4,2
Ondra – disciplina1 3,25; disciplina2 4,2
Zatím to mám řešeno přímo v šabloně, ale to mi počítá všechny hry dohromady a nejsou děleny podle disciplín…
{foreach $players as $player}
<tr>
<td><a href="{plink Player:card id=>$player->id}">{$player->fname} {$player->lname}</a></td>
{$score = $player->related('score','player_id')->sum('score')}
{$gam = $player->related('game','player_one')->count('*') + $player->related('game','player_two')->count('*')}
<td>{$gp = $score / $gam}</td>
</tr>
{/foreach}
Jak na to? nepotřebuji přímo napsaný kód ale říct jak se k tomuto výsledku dostat.
- Reloecc
- Člen | 15
@boneofsin:
prvně, aby ti šablona nevypisovala proměnné $jp a $gam (později $score a
$gam), je nutné použít pro jejich definici macro var, tedy:
{var $score = .. }
co se zbylého dotazu týče, tedy jak danou věc zprovoznit, doporučuji nejdříve projet základy php a html, teprve potom se pustit do nette, můj názor. Ale abych odpověděl, potřebuješ něco jako:
<table>
<thead>
<th>Jméno</th>
{foreach $games as $game}
<th>Score {$game->name}</th>
{/foreach}
</thead>
<tbody>
{foreach $players as $player}
<td>{$player->name}</td>
{foreach $games as $game}
{var $score_hrace_hry = ..}
<td>{$score_hrace_hry}</td>
{/foreach}
{/foreach}
</tbody>
</table>
pro uplatnění podobného kódu ti v tabulce [games] chybí sloupec [name]; přičemž v proměnné $score_hrace_hry bys měl vypočítat ‚celkový průměr hráče pro daný typ hry‘ .. což bude pochopitelně součet her daného typu daného hráče, podělený počtem her stejného typu (v případě aritmetického průměru).
Editoval Reloecc (14. 5. 2013 9:08)
- boneofsin
- Člen | 25
díky… mkrnu na to dneska na noční… Jo pomalu začínám, mám doma nějaké publikace. HTML mě tolik netrápí, ale z toho PHP sem furt vedle jak ta jedle.. =/
PHP a MySQL bez předchozích znalostí
a