tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

DibiDataSource → LEFT JOIN

před 10 lety

RadeCzech
Člen | 3

Ahoj,

hraju si tady už docela dlouho s dotazem do databáze a nemůžu na něj přijít …

Jedná se o dotaz s LEFT JOINem pomocí DibiDataSource.
Zkoušel jsem napsal celý dotaz jako dataSource(‚SELECT * FROM tabulka1 LEFT JOIN tabulka2 ON tabulka1.id = tabulka2.id‘) a tohle mi házelo error v laděnce „Dupliucated column name ‚id‘“ … pak jsem se podíval na dotaz co se posílá a bylo tam toto:
SELECT *
FROM(
SELECT *
FROM
..
..
)t

Moje dotazy ?

  1. Proč se mi tam píše ten SELECT dvakrát?
  2. Proč se tam píše to t kvůli kterému celý dotaz nefunguje a jak tomu zamezit aby se tam nedopisovalo ?
  3. Jak to popřípadě udělat v DataSource aby to fachalo :-)

Děkuji moc za odpovědi

Editoval RadeCzech (8. 5. 2009 15:32)

před 10 lety

vrtak-cz
Člen | 2249

Ty to asi používáš v nette co? A taky to používáš pro paginator že? Takže se ti generují 2 dotazy jeden na celkový počet řádků a druhý pro samotné řádky. Tzn ten co ti dělá SELECT * FROM( SELECT * FROM .. .. ) zistuje kolik je celkem radku na dotaz (bez limitu).

před 10 lety

RadeCzech
Člen | 3

vrtak-cz napsal(a):

Ty to asi používáš v nette co? A taky to používáš pro paginator že? Takže se ti generují 2 dotazy jeden na celkový počet řádků a druhý pro samotné řádky. Tzn ten co ti dělá SELECT * FROM( SELECT * FROM .. .. ) zistuje kolik je celkem radku na dotaz (bez limitu).

Jako v Nette to používám to ano (resp. snažím se – učím se :) ) Ale nepoužívám to na paginator. Používám to na něco jiného. Prostě dejme tomu že mám tabulku knihy a tabulku autoři a při výpisu všech knih chci vypsat autory u každého.

před 10 lety

vlki
Člen | 218

Hm, vždycky jsem si myslel, že u JOINů se sloupce se stejnými jmény prostě jen zjednoduší tak, že se zobrazuje jen ten z poslední tabulky…

Každopádně něco jako SELECT tabulka1.*, tabulka2.[co_je_potreba] FROM tabulka1 LEFT JOIN tabulka2 ON tabulka1.id = tabulka2.id nefunguje?

před 10 lety

RadeCzech
Člen | 3

vlki napsal(a):

Hm, vždycky jsem si myslel, že u JOINů se sloupce se stejnými jmény prostě jen zjednoduší tak, že se zobrazuje jen ten z poslední tabulky…

Každopádně něco jako SELECT tabulka1.*, tabulka2.[co_je_potreba] FROM tabulka1 LEFT JOIN tabulka2 ON tabulka1.id = tabulka2.id nefunguje?

No ono to tak je, jako SQL dotaz mi to fungovalo v phpmydminu, ale Dibi si tam asi něco doplňuje tak se to muselo takhle „očůrat“ :-)

Z toho plyne že to co jsi napsal funguje. Nevděl jsem že se to dá takhle zapsat. Super nápad, díky moc