Oznámení
DISTINCT v DibiDataSource
před 10 lety
- romansklenar
- Člen | 657
Šla by do DibiDataSource
doplnit podpora pro
klíčové slovo DISTINCT
?
$dataSource->select('DISTINCT column'); // SELECT `DISTINCT column` ...
Zrada je v tom, že při exportu
datasourcu do řetězce s dotazem se obalí zpětnými uvozovkami vždy
celý řetězec (díky
modifikátoru %n) a nejde dibi nijak vnutit, aby bral DISTINCT
jako
klíčové slovo.
Netroufám si hádat, jaká by byla nejefektivnější implementace, dost
možná by jen stačilo naučit modifikátor %n
naučit reagovat na
určitá klíčová slova nebo brát v potaz modifikátor %sql
,
pak by se ale úprava netýkala DibiDataSource
ale
DibiTranslator
-u.
Editoval romansklenar (7. 6. 2009 19:21)
před 10 lety
- David Grudl
- Nette Core | 6806
Ono slovo DISTINCT přímo nepatří do výčtu sloupců, takže to je dobře, že to %n nerespektuje. Otázka je, jak podporu implementovat, do nečeho tak obecného jako je datasource…
před 10 lety
- phx
- Člen | 652
Obcase jsem i narazil prtz jsem potreboval neco takovehoto
$ds->select('MAX(sloupecek) AS max');
// nebo by to slo mozna...
$ds->select('MAX(sloupecek)')->AS('max');
Coz taky to vezme jakou nazev sloupecku.
Osobne bych preferoval aby select u DS bralo dibi modifikatory. V podstate DibiFluent:) Aby slo psat neco jako
$ds->select('%sql', 'DISTINCT');
Vychozi by bylo ono %n a melo by to byt OK:)
Coz by nakonec i umoznilo zapisy:
$ds->select('sloupecA', 'sloupecB', 'sloupecC');
// nebo se pletu a toto jde?
před 10 lety
- romansklenar
- Člen | 657
Druhý parametr je teď vyhrazený pro aliasy a nesmíš zapomenout, že to
musí brát i pole, aby to bylo konzistentní s where()
a
orderBy()
.
David Grudl napsal(a):
Otázka je, jak podporu implementovat, do nečeho tak obecného jako je datasource…
Pokud bychom se bavili o implementaci, je požadavek aby to bralo jen
DISTINCT
nebo i třeba MAX(), MIN()
atd?
Já chápu datasource jako nástroj pro výběr záznamů než
na provádění agregačních funkcí jako MIN/MAX/...
, protože na
ty se hodí určitě více DibiFluent
.
před 10 lety
- David Grudl
- Nette Core | 6806
Jj, DibiDataSource má být odlišné od DibiFluent a mělo by být limitované jen na výběr z dat.
DISTINCT by měl umět. Jen mám pocit, že funkce se na různých databázích liší, na MSSQL tuším DISTINCTROW = DISTINCT na MySQL.