![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
есть табличка
CREATE TABLE IF NOT EXISTS `system_catalog` (
`id_catalog` int(11) NOT NULL AUTO_INCREMENT,
`name` tinytext NOT NULL,
`id_parent` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id_catalog`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
и дамп
INSERT INTO `system_catalog` (`id_catalog`, `name`, `id_parent`) VALUES
(1, 'RO', 0),
(2, 'T', 0),
(3, 'Пораздел ', 1),
(4, 'О', 0),
(5, 'подкаталог', 4),
(7, 'Подраздел 2', 1),
(8, 'Подкаталог Подкталог ', 3);
Какой составить запрос, что бы введя id_catalog = 3 получить значение начальной ветви id_catalog=1
Отредактированно Артем125 (14.06.2010 16:30:16)
Неактивен
Вложенными?
SELECT * FROM system_catalog WHERE `id_catalog` IN ( SELECT `id_parent` FROM system_catalog WHERE id_catalog =3 )
Неактивен
мы не знаем глубину вложения(
то есть нужно выводить все пока id parent не станет равным нулю
скажем для id=8
Отредактированно Артем125 (14.06.2010 17:35:10)
Неактивен
есть подозрение, что через вложенный запрос вложенности эдак 10 и с проверкой через IF это можно провернуть, но времени сейчас нет рабочий запрос составить
Неактивен
Рекурсия произвольного уровня вложенности в одном запросе средствами MySQL не программируется.
Делать такое придется процедурой. Например, такой, как описывается в этой статье: http://webew.ru/articles/2080.webew#mysql
offtop: По никам сначала подумал, что Вы сам себе отвечаете.. :о
Неактивен