Oznámení
problem s nedefinovanym order by v DibiDataSource pre postgre driver
před 10 lety
- edke
- Člen | 198
Mam problem s DibiDataSource ak nezadam order by:
$dataSource= dibi::getConnection()->dataSource("
select *
from table
");
$rows= $dataSource->fetchAll();
Vysledne query vyzera pre postgre takto:
SELECT *
FROM (
select *
from table
) AS t
WHERE TRUE
ORDER BY TRUE
s cim mam v postgre 8.2 problem: CHYBA: necelocíselná konštanta v ORDER BY
Ak zmenim query na:
SELECT *
FROM (
select *
from table
) AS t
WHERE TRUE
ORDER BY 1
prejde to v poriadku. samozrejme ze to nie je celkom idealne riesenie, v postgre order by 1 znamena sortovanie podla 1. stlpca s asc.
před 10 lety
- David Grudl
- Nette Core | 6806
Lze v postgre zapsat výraz v ORDER BY jinak, aby to bylo ideální?
před 10 lety
- papo
- Člen | 3
David Grudl napsal(a):
Lze v postgre zapsat výraz v ORDER BY jinak, aby to bylo ideální?
Vytvorit v selecte dummy stlpec a podla neho sortovat.DibiDataSource je nejaka obdoba view?
před 10 lety
- edke
- Člen | 198
David Grudl wrote:
Lze v postgre zapsat výraz v ORDER BY jinak, aby to bylo ideální?
No rieseni je viac:
- najcistejsie by bolo, keby v pripade ze vyhodnotis nulovu hodnotu, odstranis/zakomentujes order by v query. rovnako aj applylimit aplikujes az v pripade, ze mas k nemu hodnoty, mozno by stalo zato rovnako pracovat s order by.
- riesenie s triedenim podla 1. stlpca, co v pripade ked riesis result bez
sortovania ti moze byt jedno, ale zase na druhej strane je to na urok rychlosti,
kedze ten order by query zbytocne spomaluje:
order by 1
- pridanim dummy stlpca, co moze byt tiez problem, treba osetrit, ci stlpec
s takym nazvom uz v query nie je. ale samozrejme znovu sme pri tom istom, ze
sa v podstate zbytocne spomaluje query, kedze sortovanie nie je potrebne:
select *, null as dummy from (select * from app_uzivatel) as t where true order by dummy
před 10 lety
- David Grudl
- Nette Core | 6806
Je to pořešené v poslední revizi.
před 10 lety
- edke
- Člen | 198
David Grudl wrote:
Je to pořešené v poslední revizi.
Vdaka, odkusane a funguje to skvelo. Ked to uz tak pekne mas zrealizovane pre orderby a limit, nechce sa ti to aplikovat aj na where ? :)
před 10 lety
- David Grudl
- Nette Core | 6806
No mohlo… ale to už je čistě kosmetická záležitost.
před 10 lety
- edke
- Člen | 198
David Grudl wrote:
No mohlo… ale to už je čistě kosmetická záležitost.
No ano, tu uz to spomalenie ak je, tak je minimalne. Len kozmetika a je tam v podstate zbytocne.
Ale chcem sa spytat este na par drobnosti:
- je moznost aplikovat na datasource este group by a having ? Hlavne ten group by by sa zisiel, napriklad ked z datasource je potrebne generovat roletky do formularov.
- pri group by by sa potom rovnako zislo vybrat z celkoveho vyctu sltpcov len
niektore konkretne, to sa ako pozeram API da aplikovat cez
select ?
$dataSource->select( array( 'field1', 'field2', ... );