Databáze – alias tabulky „AS“
- dj.kure
- Člen | 70
Ahoj,
potřebuji v dotazu využít Alias tabulky, takže nějak takhle:
... FROM "penezenka" AS "p" ...
Což jsem předpokládal, že půjde zadat tímto stylem:
$p = $this->database->table('penezenka AS p');
Ale nejde, výsledkem je jen chybové hlášení Table ‚penezenka
as p‘ does not exist.
Zkoušel jsem všechny možné kombinace uvozovek, ale prostě se mi to
nedaří.
Co dělám špatně?
Děkuji.
Editoval dj.kure (18. 7. 2018 13:59)
- Ondřej Kubíček
- Člen | 494
zkus
$p = $this->database->table('penezenka');
$p->alias('penezenka', 'p');
Editoval Ondřej Kubíček (18. 7. 2018 14:15)
- dj.kure
- Člen | 70
To bohužel končí chybovou hláškou:
Call to undefined method Nette\Database\Table\Selection::alias()
Edit: upravil jsem dotaz tak, že alias tabulky využívám až
v podmínce (where), takže už mi to funguje.
Ovšem stejně by mi zajímalo, jak má případně vypadat alias tabulky
v dotazu.
Editoval dj.kure (18. 7. 2018 14:44)
- Ondřej Kubíček
- Člen | 494
jakou verzi nette používáš? ve 2.4 alias v selection je – https://api.nette.org/…ion.php.html#…
jakože v jakým dotazu? jak máš celý dotaz ted? čeho chceš dosáhnout?
- dj.kure
- Člen | 70
Mám starší verzi:
2.3.10 (released on 2016-04-13)
SQL dotaz byl s vloženým subselectem ze stejné tabulky.
Nastíním:
$selection = $this->database->table("penezenka")
->select('id_smlouvy, MAX(aktivni_do) AS aktivni')
->where("(SELECT MAX(aktivni_do) FROM penezenka AS p WHERE id_smlouvy = penezenka.id_smlouvy) < now()::date")
->group('id_smlouvy')
->order('id_smlouvy');
V databázi mám záznamy plateb do peněženky zákazníků (předplacenky) a potřeboval jsem vyselectovat jen ty záznamy, které již nejsou aktivní.
Takhle funguje :-)
Editoval dj.kure (18. 7. 2018 16:50)