Prosba o radu s přiřazením dalších hodnot do již existujícího výpisu z DB
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Kajry
- Člen | 5
Ahoj.
Mám kód pro dostání výpisu z databáze
Presenter vypadá takto:
<?php
namespace App\FrontendModule\Presenters;
use Nette;
use App\Model;
class PoradimuziPresenter extends BasePresenter
{
public function renderdefault()
{
$this->template->vysledkymuzinew = $this->database->query('SELECT vysledky.tymid, vysledky.body, tymy.id, tymy.nazev, SUM(vysledky.body) AS TOTAL
FROM vysledky, tymy
WHERE vysledky.kategorie=? AND vysledky.tymid=tymy.id
GROUP BY vysledky.tymid
ORDER BY Total DESC;', 'mu');
}
}
Layout:
{block content}
<p><a n:href="Homepage:default">Zpět na hlavní stránku</a></p>
<h1 n:block=title>Průběžné pořadí - muži</h1>
<div style="overflow-x:auto;">
{if count($vysledkymuzinew) > 0}
<table class="table table-condensed">
<thead>
<tr>
<th>Tým</th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
<th>9</th>
<th>10</th>
<th>11</th>
<th>12</th>
<th>13</th>
<th>14</th>
<th>Body celkem</th>
</tr>
</thead>
<tbody>
{foreach $vysledkymuzinew as $vysledkymuzinew}
<tr>
<td>{$vysledkymuzinew->nazev}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>{$vysledkymuzinew->TOTAL}</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
{else}
<p>Zatím žádné výsledky.</p>
{/if}
{/block}
schéma databáze je http://kajry.cz/dblayout.PNG
a výsledná tabulka vypadá http://kajry.cz/tabulka.PNG
Nyní bych ke každému týmu potřeboval do prvního sloupce přiřadit jeho body ze soutěže s id 1 atd až do 14. Vůbec nevím jak to prokombinovat jak třeba vytvořit další dotaz na db kde bych předal tymid a vypsal jeho body do příslušného sloupce pokud záznam existuje a pokud ne ponechat prázdne <td></td>. Pokud by někdo poradil byl bych rád a další věc nějak nevím jak zapsat pořádně první query na db do notORM tvaru.
Díky za každou radu, mě už to nějak nemyslí.
- Kajry
- Člen | 5
Tak nakonec jsem to vyřešil trochu složitějším query:
$this->template->vysledkymuzi = $this->database->query('select pivot.nazev,
sum(ifnull(pivot.A,"")) as A,
sum(ifnull(pivot.B,"")) as B,
sum(ifnull(pivot.C,"")) as C,
sum(ifnull(pivot.D,"")) as D,
sum(ifnull(pivot.E,"")) as E,
sum(ifnull(pivot.F,"")) as F,
sum(ifnull(pivot.G,"")) as G,
sum(ifnull(pivot.H,"")) as H,
sum(ifnull(pivot.I,"")) as I,
sum(ifnull(pivot.J,"")) as J,
sum(ifnull(pivot.K,"")) as K,
sum(ifnull(pivot.L,"")) as L,
sum(ifnull(pivot.M,"")) as M,
sum(ifnull(pivot.N,"")) as N,
sum(ifnull(pivot.A,0))+sum(ifnull(pivot.B,0))+sum(ifnull(pivot.C,0))+sum(ifnull(pivot.D,0))+sum(ifnull(pivot.E,0))+sum(ifnull(pivot.F,0))+sum(ifnull(pivot.G,0))+sum(ifnull(pivot.H,0))+sum(ifnull(pivot.I,0))+sum(ifnull(pivot.J,0))+sum(ifnull(pivot.K,0))+sum(ifnull(pivot.L,0))+sum(ifnull(pivot.M,0))+sum(ifnull(pivot.N,0)) as total from (
select
vysledky.tymid, tymy.nazev,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as A,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as B,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as C,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as D,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as E,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as F,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as G,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as H,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as I,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as J,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as K,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as L,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as M,
case when vysledky.soutezid = ? then vysledky.pocetbodu end as N
from vysledky, tymy
where vysledky.kategorie=? AND vysledky.tymid=tymy.id
) pivot group by tymid
ORDER BY total DESC', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', 'mu');