NDB a podpora view s parametrem
- David Matějka
- Moderator | 6445
ja taky nechapu. jakou promennou? ukaz, jak vypada ten view. a ukaz, jak by ses dotazoval normalnim sql.
- MW
- Člen | 626
Data jsou datasource pro grid a posledne jsem to resil asi takto:
return $this->database->table('contracts')->SELECT('id, name, branches_id, since, to,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 12 AND YEAR(datzdanpln) = ' . $year . '-1 AND mrp_cislo = cislo_zak) AS lprosinec,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 1 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS leden,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 2 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS unor,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 3 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS brezen,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 4 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS duben,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 5 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS kveten,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 6 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS cerven,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 7 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS cervenec,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 8 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS srpen,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 9 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS zari,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 10 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS rijen,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 11 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS listopad,
(SELECT SUM(predpis) FROM mrp WHERE MONTH(datzdanpln) = 12 AND YEAR(datzdanpln) = ' . $year . ' AND mrp_cislo = cislo_zak) AS prosinec
');
Tabulka ma vypadat :
Zakazka Leden Unor Brezen ....
Zak1 123456 123456 123456
Zak2 123456 123456 123456
Zak3 123456 123456 123456
....
Jenze se me to moc nelibi a chtěl jsem s tim pracovat lepe – jako
s tabulkou.. resp. se vyhnout v NTD tomu Select().
Tak me napadlo to resit přes pohled… jenze když udelam pohled s onou
promenou tak me uz doslo, ze neovlivnim výsledek.. takze asi koncim zas na
tomto modelu…
- CZechBoY
- Člen | 3608
Nemůžeš použít GROUP BY
MONTH, YEAR?
např
'SELECT id, name, branches_id, since, to,
SUM(predpis)
FROM contracts
INNER JOIN mrp
ON mrp_cislo = cislo_zak
WHERE datzdanpln > ' . $minulyProsinec . '
GROUP BY YEAR(datzdanpln), MONTH(datzdanpln)'
Editoval CZechBoY (25. 1. 2016 14:29)
- h4kuna
- Backer | 740
Zkus si ten dotaz seskládat jinak, když to chceš mít ve sloupcích tak můžeš podmínit ten SUM. Jestli to dělá co má si odzkoušej sám, je to jen ukázka jak jinak to udělat.
Tohle bych řekl že bude dělat to samé a je to bez subselectu
<?php
$startDate = new \DateTimeImmutable(($year - 1) . '-12-01');
$period = new DatePeriod($startDate, new DateInterval('P1M'), $startDate->modify('+13 month'));
$sum = NULL;
foreach ($period as $date) {
if ($sum !== NULL) {
$sum .= ', ';
}
$sum .= "SUM(IF(DATE_FORMAT(datzdanpln, '%Y-%m') = '{$date->format('Y-m')}', predpis, 0)) AS " . $date->format('F_Y');
}
$select = $sum;
$this->database->table('contracts')->select($select)->where('mrp_cislo = cislo_zak')->group('branches_id');
?>
Hodnoty id, name, branches_id, since, to si vytáhni v samostatném dotazu ty se jen duplikují?
EDIT
Respektive teď tam dodej nějak GROUP BY podle čeho se to má agregovat. branches_id?
Editoval h4kuna (25. 1. 2016 20:15)