Jak do stránky vypsat výsledek výpočtu nad sloupci v tabulce
- edmund
- Člen | 28
Zdar, omlouvám se za možná úplně blbej dotaz, ale nějak jsem se do toho
zamotal a už nevím, kudy kam.
Takže k dotazu:
Mám v mysql tabulku vykony, která obsahuje sloupce Cas(time) a Vzdalenost(decimal). Do tabulky ukládám výsledky nějakých běhů.
V modelu mám:
public function getAktivity()
{
return $this->database->table('vykony');
}
v presenteru mám:
$this->template->aktivity = $this->aktivity->order('Datum');
a v šabloně pak vypisuju jednotlivé běhy takto:
{foreach $aktivity as $aktivita}
<tr>
<td>{$aktivita->Vzdalenost} km</td>
<td>{$aktivita->Cas}</td>
<td><a n:href="detail, $aktivita->id"><img src="{$basePath}/img/zoom.png" title="Detail trasy" ></a></td>
</tr>
{/foreach}
Teď bych chtěl přidat sloupeček, kde bude průměrné tempo na kilometr.
Chápu, jak to vypočítat, ale nevím, kam by to mělo přijít.
Uměl bych třeba udělat v mysql pohled, který by už tenhle sloupec
obsahoval:
(select Cas,Vzdalenost, sec_to_time(time_to_sec(Cas)/Vzdalenost) as Tempo from
vykony;)
a mohl bych načítat ten místo tabulky, ale to se obávám, jestli pak bude
možné snadno upravovat záznamy, jako když pracuju přímo s tabulkou
$this->aktivity->get($id)->update($form->values);
Nejradši bych to udělal přímo v šabloně, při výpisu jednotlivých řádku, ale nevím, jak to zapsat. Pokud použiju něco jako
<td>{$aktivita->Cas/$aktivita->Vzdalenost}</td>
tak se vypisují jen nuly.
- Mikulas Dite
- Člen | 756
Právě že pokuď to nechce ukládat, tak spíš jenom
{=$aktivita->cas / $aktivita->vzdalenost}
- edmund
- Člen | 28
Díky, za rady, zkoušel jsem obě varianty, ale ani jedna nefunguje. První
nevypisuje nic a druhá opět jen nulu. Ještě jsem to trochu testoval a zdá
se mi, že v proměnné $aktivita->cas je hodnota typu string a ne
očekávané číslo. Když napíšu jen:
{$aktivita->Cas} vypíše se 00:50:10
{$aktivita->Cas |date:‚%h:%i:%s‘} vypíše ::
{$aktivita->Cas |number:2} vypíše 0.00
Přitom v db má tento sloupec typ time. Používám i jiný sloupec,
který je typu date a u něj normálně funguje zápis:
{$aktivita->Datum|date:‚%d.%m.%Y‘}
Zatím jsem se dopracoval k tomuhle funkčnímu kódu:
<td>
<?php
$c=explode(":",$aktivita->Cas);
$s=($c[0]*3600+$c[1]*60+$c[2])/$aktivita->Vzdalenost;
echo Date ("i:s", MkTime (0, 0, $s, 0, 0, 0));
?>
</td>
Dělá přesně to, co chci, ale vůbec se mi to nelíbí. Určitě to musí jít nějak jednodušeji.
Editoval edmund (16. 8. 2011 10:49)
- Semik
- Backer | 135
edmund napsal(a):
Díky, za rady, ozkoušel jsem obě varianty, ale ani jedna nefunguje. První nevypisuje nic a druhá opět jen nulu.
Není problém s „datovým typem“ ? Jsou jisté varianty, které bude mít výsledek podle toho jakého typu bude čitatel resp. jmenovatel (float, int .....). Teda co vím z jiných jazyků.
Editoval Semik (16. 8. 2011 10:47)
- Claudie1
- Člen | 21
neznám Nette\Database, používám dibi. Ovšem pokud jde při selectu použít funkce MySQL, použij při selectu sloupce cas TIME_TO_SEC() -dostanes hodnotu v sekundách
Editoval Claudie1 (16. 8. 2011 11:24)