Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как объединить таблицу саму с собой
 
 автор: Микель   (22.07.2008 в 12:27)   письмо автору
 
 

Подскажите плз
Есть такая таблица с категориями родительскими и дочерними.


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. А так что-то ничего не придумывается.Спасибо.
Спасибо.

   
 
 автор: Trianon   (22.07.2008 в 14:36)   письмо автору
 
   для: Микель   (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 в 15:03)   письмо автору
 
   для: Микель   (22.07.2008 в 12:27)
 

Спасибо, буду пользовать в дальнейшем:)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования