|
|
|
| Подскажите плз
Есть такая таблица с категориями родительскими и дочерними.
CREATE TABLE `categories` (
`id_category` int(11) NOT NULL auto_increment,
`name_category` varchar(255) NOT NULL,
`id_parent_category` int(11) default '0',
`param1_name` varchar(255) default 'Название',
`param2_name` varchar(255) NOT NULL,
`param3_name` varchar(255) NOT NULL,
`param4_name` varchar(255) NOT NULL,
`param5_name` varchar(255) default 'Цена с НДС',
`c_ordinal` int(11) default '0',
PRIMARY KEY (`id_category`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=11 ;
--
-- Dumping data for table `categories`
--
INSERT INTO `categories` VALUES (1, '11111111111', 0, 'Название', '', '', '', 'Цена с НДС', 1);
INSERT INTO `categories` VALUES (2, '2222222222222', 5, 'Название', '', '', '', 'Цена с НДС', 2);
INSERT INTO `categories` VALUES (6, '777777777777', 5, 'Название', '', '', '', 'Цена с НДС', 1);
INSERT INTO `categories` VALUES (5, '55555555555', 0, 'Название', '', '', '', 'Цена с НДС', 3);
INSERT INTO `categories` VALUES (7, '888888888888', 0, 'Название', '', '', '', 'Цена с НДС', 2);
INSERT INTO `categories` VALUES (8, 'ttttttttttttttttttttttt', 6, 'Название', '', '', '', 'Цена с НДС', 2);
INSERT INTO `categories` VALUES (9, 'rtrttrrtrt', 6, 'Название', '', '', '', 'Цена с НДС', 1);
INSERT INTO `categories` VALUES (10, '677777777777', 6, 'Название', '', '', '', 'Цена с НДС', 3);
|
Мне нужно вывести все категории с родителем,равным 0, а рядом с названием каждой корневой категории количество дочерних котегорий,в том числе и нулевое.
Вот написал такой запрос,но он выводит только непустые категории.
SELECT c1.id_category,
c1.name_category,
COUNT(c2.id_parent_category) AS chield
FROM categories AS c1,
categories AS c2
WHERE c1.id_parent_category = 0 AND
c2.id_parent_category = c1.id_category
GROUP BY c1.id_category
ORDER BY c1.c_ordinal
|
Если бы таблицы были разными, я бы использовал LEFT JOIN и USING. А так что-то ничего не придумывается.Спасибо.
Спасибо. | |
|
|
|
|
|
|
|
для: Микель
(22.07.2008 в 12:27)
| | >Мне нужно вывести все категории с родителем,равным 0, а рядом с названием каждой корневой категории количество дочерних котегорий,в том числе и нулевое.
> ...
>Если бы таблицы были разными, я бы использовал LEFT JOIN и USING.
SELECT c1.id_category,
c1.name_category,
c1.c_ordinal,
COUNT(c2.id_parent_category) AS chield
FROM categories AS c1
LEFT JOIN categories AS c2 ON c2.id_parent_category = c1.id_category
WHERE c1.id_parent_category = 0
GROUP BY c1.id_category, c1.name_category, c1.c_ordinal
ORDER BY c1.c_ordinal
|
LEFT JOIN и нужно применять.
Вообще, "запятую" лучше не использовать никогда.
Что касается USING , то это указание годится лишь когда сопоставляемые ключи в таблице имеют тождественные имена. И даже в этом случае лучше расписать через ON, поскольку есть проблема с переносимостью (от версии к версии) | |
|
|
|
|
|
|
|
для: Микель
(22.07.2008 в 12:27)
| | Спасибо, буду пользовать в дальнейшем:) | |
|
|
|
|