Nette\Database a GROUP BY fn
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- vitush93
- Člen | 33
Nazdar, vybírám z tabulky termínů záznamy po dnech a prosím o radu.
pro SQL:
SELECT * FROM terminy WHERE datum > NOW() GROUP BY DATE_FORMAT(datum, '%d.%m.%Y') ORDER BY datum
jsem zplodil toto:
$this->getTable('terminy')
->where('datum > ?', date("Y-m-d H:i:s"))
->group("DATE_FORMAT(datum, '%d.%m.%Y')")
->order('datum');
a to přirozeně nefunguje. Nevíte jak se přes NotORM řeší takovéto více „custom“ dotazy?
Editoval vitush93 (23. 8. 2013 17:35)
- vitush93
- Člen | 33
mkoubik napsal(a):
Píšu to z hlavy, ale mohlo by fungovat
$this->getTable('terminy') ->where('datum > ?', new \DateTime()) ->group(new \Nette\Database\SqlLiteral('DATE_FORMAT(datum, \'%d.%m.%Y\')')) ->order('datum');
Diky za odpoved. taky si ted hraju se SqlLiteral. Nejde – mám to samé. Vygenerované query dopadne takto:
SELECT *
FROM `terminy`
WHERE (`datum` > '2013-08-23 17:53:44')
GROUP BY DATE_FORMAT(`datum`, '%`d`.%`m`.%Y')
ORDER BY `datum`
formát data se blbě escapne :(
- petr.pavel
- Člen | 535
$this->getTable('terminy')
->select("*, DATE_FORMAT(datum, '%d.%m.%Y') AS fDatum")
->where('datum > CURRENT_TIMESTAMP')
->group("fDatum")
->order('datum');
Mimochodem, jaký to má smysl GROUPovat podle formátovaného času? Jestli máš ‚datum‘ ve skutečnosti TIMESTAMP, tak bys měl spíš CASTovat, než formátovat. Tím taky zachováš NULLové hodnoty.
->group('CAST(datum AS DATE)')