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.