|
|
|
| Помогите сформировать запрос. Есть две таблицы:
1. Категории (неограниченная вложенность)
2. Продукция.
Вложенность категорий определяется полем parent, родитель - 0.
Товар присваивается определенной категории по полю id_category.
Нужно составить один запрос чтобы вывести категории определенного родителя, например, parent=0 и отобразить сколько у выведеных категорий подкатегорий и сколько товаров.
Помогите плиз, а то уже голову сломал с этим запросом :(
CREATE TABLE `category` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`public` int(1) NOT NULL default '0',
`desc` text NOT NULL,
`parent` int(11) NOT NULL default '0',
`subcat` varchar(255) NOT NULL default '0',
`sort` varchar(255) NOT NULL default '0',
`hidden` int(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=47 ;
CREATE TABLE `products` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`created` int(11) NOT NULL default '0',
`modified` int(11) NOT NULL default '0',
`id_category` varchar(255) NOT NULL default '',
`picture` varchar(255) NOT NULL default '',
`price` varchar(255) NOT NULL default '',
`valuta` varchar(255) NOT NULL default '',
`picture_small` varchar(255) NOT NULL default '',
`old_price` varchar(255) NOT NULL default '',
`desc_s` text NOT NULL,
`desc_l` text NOT NULL,
`public` int(1) NOT NULL default '0',
`sort` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;
|
| |
|
|
|
|
|
|
|
для: newmen
(31.05.2007 в 02:57)
| | если необходимо определять для каждой категории общее количество входящих в нее подкатегорий(на любых уровнях) - структура Adjacency List (id, parent_id) не подойдет. Лучше опираться на структуру Nested sets (id, left_rb, right_rb, level) либо на Matherialized paths (id, path) | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2007 в 09:49)
| | Это не совсем то, что нужно. Нужен обычный sql запрос для объединения двух таблиц. То что требуется получить из этих двух таблиц будет выглядеть приблизительно так.
|----------------|-----------------------|---------------|
| Название | Подкатегорий | Товаров |
|----------------|-----------------------|---------------|
| Тест 1 | 2 | 20 |
|----------------|-----------------------|---------------|
| Тест 2 | 9 | 10 |
|----------------|-----------------------|---------------|
| Тест 3 | 6 | 35 |
|----------------|-----------------------|---------------|
|
| |
|
|
|
|
|
|
|
для: newmen
(31.05.2007 в 11:57)
| | Мне по-другому сказать?
В рамках выбранной структуры представления дерева и условия неограниченной вложенности его узлов, такой запрос написать невозможно.
Так понятнее? | |
|
|
|
|
|
|
|
для: Trianon
(31.05.2007 в 12:36)
| | Мне не нужно все узлы считать... ТОЛЬКО ПОДКАТЕГОРИИ родителя ("SELECT * FROM category WHERE `parent`='$IDParent'") и продуктов только данного родителя. | |
|
|
|
|
|
|
|
для: newmen
(31.05.2007 в 17:42)
| | То есть только непосредственные потомки?
Тогда как-то так:
SELECT cat.name, cats.c_cnt, prods.p_cnt
LEFT JOIN
(SELECT c.id AS c_id,
COUNT (s.parent) AS с_cnt
FROM categories AS c
LEFT JOIN categories AS s ON c.id = s.parent
GROUP BY c.id ) AS cats
LEFT JOIN
(SELECT c.id AS c_id,
COUNT (pr.id_category) AS p_cnt
FROM categories AS c
LEFT JOIN products AS pr ON c.id = prods.id_category
GROUP BY c.id ) AS prods
ORDER BY cat.name
|
| |
|
|
|