Nette\Database – spojení 3 tabulek + limit + zobrazení nejnižšší ceny

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Desttro
Člen | 126
+
0
-

Zdravím,
zvládnu udělat select ze 2 tabulek:

$featured = $this->database->table('hotel')
                ->where(':featured.hotel_id');

Potřeboval bych ale k tomuto selectu přidat select z tabulky „termin“, kde je cizí klíč „hotel_id“, který směřuje na id v tabulce hotel. V tabulce termín, je asi 10 termínů (záleží na hotelu), kde je sloupec „cena“, a potřeboval bych zobrazit právě tu nejnižssí.

Jde toho nějak docílit?

Děkuji moc.

Editoval Desttro (22. 6. 2014 21:52)

norbe
Backer | 408
+
+1
-

Zkus něco jako:

 $this->database->table('hotel')
		->select('hotel.*, MIN(:termin.cena) AS cena')
		->group('hotel.id');

A zkus se zamyslet nad tím, jestli je dobrý mít polovinu tabulek česky a polovinu anglicky ;)

Editoval norbe (23. 6. 2014 9:59)

Desttro
Člen | 126
+
0
-

To máš pravdu, že je lepší sjendotit jazyk – přehodím si to, díky. Jinak mi to hází zase tento error:
PDOException #42000
SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: ‚hotel‘

norbe
Backer | 408
+
0
-

Nějak jsem si to blbě přečetl, zeditoval jsem kód, snad by mělo už fungovat…

Desttro
Člen | 126
+
0
-

Teď už to projde, nicméně mi to vypíše úplně všechny hotely z databáze. Ale konečně se dostanu k cenám z tabulky „termin“. Potřeboval bych to zlimitovat, aby to zobrazilo pouze ty hotely, jejichž ID je v tabulce „featured“. SQL dotaz tracy vypisuje tento:
SELECT hotel.*, MIN(termin.unit_price_adult_from) AS unit_price_adult_from
FROM hotel
LEFT JOIN termin ON hotel.id = termin.hotel_id
GROUP BY hotel.id

Editoval Desttro (23. 6. 2014 10:37)

norbe
Backer | 408
+
0
-

Tak to už můžeš filtrovat jak potřebuješ, pro tvůj případ by to konkrétně bylo ->where(':featured.hotel_id IS NOT NULL')

Desttro
Člen | 126
+
0
-

děkuji moc za pomoc!