Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день.
Есть таблица с деревом.
CREATE TABLE IF NOT EXISTS `tree` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`pid` tinyint(3) unsigned NOT NULL,
`name_rus` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `pid` (`pid`)
);
Появился вопрос - можно ли одним запросом выбрать все дерево для определенного pid?
Спасибо большое.
Неактивен
И еще вопрос.
Необходимо что бы при удалении елемента, автоматически удалялись все его дети. Для этого я пытаюсь добавить внешний ключ но на ту же таблицу.
Делаю это так:
ALTER TABLE tree ADD
FOREIGN KEY (pid)
REFERENCES tree(id) ON DELETE CASCADE
На что mysql мне говорит:
#1452 - Cannot add or update a child row
Не подскажете, что я делаю не так?
Неактивен
На первый вопрос — никак. Делайте рекурсивные запросы или пишите хранимую
процедуру, которая будет доставать во временную табличку.
На второй вопрос — подумайте, как у Вас помечены корневые строки (без родителя)
Неактивен
Спасибо за ответы, но вот с вторым вопросом я так ничего и не понял.
Неактивен
Помогите с вторыи вопросом
Неактивен
Хм. Это задание в ВУЗе?
Представьте себе, что у Вас есть дерево, которое описывается такими данными:
id | parent
-------------
1 | 0
2 | 1
3 | 1
4 | 3
Если Вы хотите ввести ограничение «parent должен обязательно содержать-
ся в этой же таблице в колонке id», то Вы неизбежно нарушите его в случае
со значением 0: у Вас никогда не будет строки, соответствующей корневой
строке дерева (иначе она по определению не будет корневой ).
Правильным решением в данном случае будет снять ограничение NOT NULL
со столбца родителя — тогда NULL будет помечать корневые ноды, а связь
будет работать нормально.
Неактивен
Спасибо огромное за объяснение.
Нет, это никаким образом не связано ни с каким учебным заведением.
Задал повторно вопрос, так как не понимал почему не работает.
Еще раз спасибо
Неактивен