Nette database JOIN nad jednou tabulkou
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- ondrej256
- Člen | 187
Zdravím,
potřebuju zapsat následující SQL dotaz v nette database, nechci používat $database->query(…), protože vrací ResultSet a já potřebuju Selection.
select gc1.parent_id, COUNT(gc1.parent_id), gc.name
from goods_category gc1 LEFT JOIN goods_category gc2 ON gc1.parent_id = gc2.id
GROUP BY gc1.parent_id
Je možné vůbec zapsat v nette database left join nad jednou tabulkou?
- ondrej256
- Člen | 187
Myslel jsem si, že už mám vyhráno, ale nakonec si opět nevím rady
Potřebuju docílit následujícího:
SELECT `goods_category`.`parent_id`, COUNT(`goods_category`.`id`) AS `has_children`, `goods_category_ref`.`name`
FROM `goods_category` LEFT JOIN `goods_category` `goods_category_ref`
ON `goods_category`.`parent_id` = `goods_category_ref`.`id`
WHERE (`goods_category_ref`.`depth` = 1)
GROUP BY `goods_category`.`parent_id`;
Nyní se mně generuje
SELECT `goods_category`.`parent_id`, COUNT(`goods_category`.`id`) AS `has_children`,
`goods_category_ref`.`name`
FROM `goods_category` LEFT JOIN `goods_category` `goods_category_ref` ON `goods_category`.`id` =
`goods_category_ref`.`parent_id`
WHERE (`goods_category_ref`.`depth` = 1)
GROUP BY `goods_category`.`parent_id`
Zápsáno to mám takto:
$db->table('goods_category')
->select('goods_category.parent_id, COUNT(goods_category.id) AS has_children, :goods_category.name')
->where(':goods_category.depth', 1)
->order('goods_category.id')
->group('goods_category.parent_id');
Rozdíl je v za klíčovým slovem ON:
toto:
goods_category`.`id` = `goods_category_ref`.`parent_id`
potřebuju zaměnit za:
goods_category`.`parent_id` = `goods_category_ref`.`id`
Nedokáže mně ještě s tímhle někdo poradit prosím? :-)
Editoval ondrej256 (16. 5. 2016 19:08)