Databáze – alias tabulky „AS“

dj.kure
Člen | 70
+
0
-

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
+
0
-

zkus

$p = $this->database->table('penezenka');
$p->alias('penezenka', 'p');

Editoval Ondřej Kubíček (18. 7. 2018 14:15)

dj.kure
Člen | 70
+
0
-

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
+
0
-

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
+
0
-

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)