LEFT JOIN Fluent Nette\Database

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

A zase netuším jak se dostat k fluent zápisu LEFT JOINu. Jde o kategorie vs. podkategorie id<->parent
potřebuju něco jako:

SELECT t2.id AS mnau, CONCAT(t1.name,' - ',t2.name) AS haf
FROM genre AS t1
LEFT JOIN genre AS t2 ON t2.parent = t1.id where t1.parent IS NULL

nepotřebuju nekonečné zanoření, zatím dvě v budoucnu možná tři úrovně mi budou stačit.

enumag
Člen | 2118
+
0
-

LEFT JOIN v Nette\Database není. Zatím vždy když jsem si myslel že jej potřebuji jsem dokázal najít jiné řešení, takže by to myslím mělo jít i v tomto případě. Bohužel ten SQL dotaz mi nějak není jasný (respektive asi jsem líný přemýšlet). Můžeš lépe popsat jaká data potřebuješ a jak vypadá struktura tvých tabulek?

enumag
Člen | 2118
+
0
-

@vvoody: Ano, o tomhle samozřejmě vím. Ale to je pouze interní záležitost která se používá při backjoinech nebo takněčem. Není (pokud vím) možnost se k tomu dostat když „zrovna potřebuju left join“.

newbie
Člen | 31
+
0
-

Jde o tabulku kategorií:

CREATE  TABLE IF NOT EXISTS `category` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NULL ,
  `parent` INT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB

No tohle je dotaz do formulářového selectu pro výběr potomků, ale i tak by mě zajímalo jak ji třeba celou vypíšu:

SELECT t1.name AS lev1, t2.name as lev2, t1.id AS id1, t2.id AS id2
FROM category AS t1
LEFT JOIN category AS t2 ON t2.parent = t1.id

Editoval newbie (4. 3. 2013 19:51)

enumag
Člen | 2118
+
0
-

Přejmenuješ parent na parent_id a nastavíš parent_id jako foreign key na category.id.

foreach ($connection->table('category') as $category) {
	if ($category->parent_id !== NULL) {
		$category->parent;
	}
}