SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.05.2010 12:58:32

BOB41K
Участник
Зарегистрирован: 14.11.2008
Сообщений: 8

Выбор категорий и подкатегорий

Есть таблица, в которой содержатся категории и подкатегории (всего 2 уровня). Если в root указан 0 - значит категория родительская, если другое число - то это номер родительской категории
--
-- Структура таблицы `category`
--

CREATE TABLE IF NOT EXISTS `category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 NOT NULL,
  `root` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM ;

--
-- Дамп данных таблицы `category`
--

INSERT INTO `category` (`id`, `name`, `root`) VALUES(1, 'Категория 1', 0);
INSERT INTO `category` (`id`, `name`, `root`) VALUES(2, 'Категория 2', 0);
INSERT INTO `category` (`id`, `name`, `root`) VALUES(3, 'Категория 3', 0);
INSERT INTO `category` (`id`, `name`, `root`) VALUES(4, 'Подкатегория 1', 1);
INSERT INTO `category` (`id`, `name`, `root`) VALUES(5, 'Подкатегория 2', 1);
INSERT INTO `category` (`id`, `name`, `root`) VALUES(6, 'Подкатегория 3', 2);
INSERT INTO `category` (`id`, `name`, `root`) VALUES(7, 'Подкатегория 4', 3);
INSERT INTO `category` (`id`, `name`, `root`) VALUES(8, 'Подкатегория 5', 3);

Задача составить запрос так, чтобы шла родительская категория, потом все ее подкатегории, потом следующая родительская категория, и все ее подкатегории. Т.е. после выборки у нас строки должны получиться в следующем порядке: Категория 1;Подкатегория 1;Подкатегория 2; Категория 2; Подкатегория 3; Категория 3; Подкатегория 4; Подкатегория 5 .
Надо это все для удобного получения дерева категорий, чтобы не приходилось делать сначала запрос родительских категорий, а потом еще и у каждой родительской категории отдельным запросом запрашивать подкатегории.

Реально ли составить такой запрос?

Отредактированно BOB41K (19.05.2010 13:11:44)

Неактивен

 

#2 19.05.2010 13:16:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Выбор категорий и подкатегорий

Я могу придумать, как это сделать, но это будет очень очень очень (я говорил очень?)
плохой запрос. Что-нибудь типа
ORDER BY IF (root = 0, id * 1000000, root * 1000000 + id).

Обычно для этого пишут хранимые процедуры, которые делают выборку рекурсивно smile

Неактивен

 

#3 19.05.2010 21:16:02

BOB41K
Участник
Зарегистрирован: 14.11.2008
Сообщений: 8

Re: Выбор категорий и подкатегорий

Спасибо, понял в какую сторону копатьsmile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson