Nette\Database JOIN table a LEFT JOIN table

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

Zdravím,
začínám s nette tak je můj dataz asi dost lamerskej. Nějak pořeád nemůžu přijít na to jak JOINovat tabulky. Z různých kódů co jsem procházel jsem to zkoušel spojit přes where, ale nefunguje to přesně tak jak bych čekal. někde se tam vložila navíc tabulka:

$this->database->table('zam_categorylist')->where('zam_productlist.categorylist_id = ?', 3);

vygeneruje tenhle dotaz:

SELECT `zam_categorylist`.*
FROM `zam_categorylist`
INNER JOIN `zam_productlist` ON `zam_categorylist`.`zam_productlist_id` = `zam_productlist`.`id`
WHERE (`zam_productlist`.`categorylist_id` = ?)

Byl by někdo tak hodnej a odkázal mě někam, kde to je vysvětlený, případně uvedl exemplární příklad zde? Potřeboval bych aby mě to vygenerovalo SQL:

SELECT *
FROM zam_categorylist JOIN zam_productlist ON zam_categorylist.id = zam_productlist.categorylist_id

popřípadě

SELECT * FROM zam_categorylist LEFT JOIN zam_productlist ON zam_categorylist.id = zam_productlist.categorylist_id

Díky moc za rady!

hrach
Člen | 1834
+
0
-

vyzkoušej

$this->database->table('zam_categorylist')->where('zam_productlist:categorylist_id = ?', 3);

používáš totiž vztah vztah hasMany, tedy jde o tu dvojtecku. Vyzkousej. Mozna jsem si to jenom spatne interpretoval.

Oli
Člen | 1215
+
0
-

Tím se odboural ten problem, že to vložilo tabulku navíc. Ještě tam byl jeden problém (který jsem přehlídl), že to vrací nesmyslnej řetězec zam_productlist.zam_categorylist_id (zam_categorylist_id neexistuje):

SELECT `zam_categorylist`.*
FROM `zam_categorylist`
INNER JOIN `zam_productlist` ON `zam_categorylist`.`id` = `zam_productlist`.`zam_categorylist_id`
WHERE (`zam_productlist`.`categorylist_id` = ?)

Každopádně moc díky! Nechá se teda obecně říct, že když JOINuju 2 tabulky tak tam mám použít dvojtečku?

.:M@rt!n:.
Člen | 201
+
0
-

Ahoj, řeším podobný problém s propojením tabulek. Mám tento dotaz nad databází:

SELECT polozka.cena, polozka.nazev, polozka.objem
FROM polozka
INNER JOIN kategorie ON polozka.id_kategorie = kategorie.id
INNER JOIN listek ON kategorie.id_listek = listek.id
WHERE listek.id =1
ORDER BY polozka.id

a nevím jak ho převést do NotORM dotazu. Zatím mám v presenteru toto, kde propojování nemám zatím řešené, ale potřebuji aby to něco vybíralo:

$this->template->polozka = $this->context->createPolozka()
                        ->where('id_kategorie <= 17')->order('id_kategorie, nazev ASC');

Díky za radu

ViPEr*CZ*
Člen | 813
+
0
-

->where(‚id_kategorie <= 17‘) bych vyměnil za toto ->where(‚id_kategorie <= ?‘, 17)

patriksima
Člen | 58
+
0
-

Já si nevím rady s tímhle dotazem v Nette\Database. Dotaz se dvěma joiny, řazení podle sloupce top tabulky. Tuším, že v Table\Selection to nejde řešit, že?

SELECT c.name as client, l.name as list, le.*
FROM wm_list_email as le
LEFT JOIN wm_list as l on l.id = le.list_id
LEFT JOIN wm_client as c on c.id = l.client_id
ORDER BY client

Díky

Btw.: V Chromiu mi nejde přidat komentář. Editor tu prostě není.

Editoval patriksima (21. 6. 2012 13:52)

Aurielle
Člen | 1281
+
0
-

btw: ctrl+f5, někde se to tu řešilo, taky mi to občas dělá.