Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица, в которой содержатся категории и подкатегории (всего 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)
Неактивен
Я могу придумать, как это сделать, но это будет очень очень очень (я говорил очень?)
плохой запрос. Что-нибудь типа
ORDER BY IF (root = 0, id * 1000000, root * 1000000 + id).
Обычно для этого пишут хранимые процедуры, которые делают выборку рекурсивно
Неактивен
Спасибо, понял в какую сторону копать
Неактивен