Удаление категории (структура с parent_dir)

Печать RSS
143

K
Автор
Транклюкаторщик
0
Давно мучает вопрос.
Допустим, скрипт библиотеки.
категории и статьи пишем 2 разные таблицы.
примерно такие таблицы получаются:
Категории:
create table if not exists `library_category` (
`id` int auto_increment, - ид категории
`name` text not null, - название 
`parent` int not null, - "родительская" категория
primary key(id)
) engine=myisam default charset=utf8;

Статьи:
create table if not exists `library_article` (
`id` int auto_increment, - ид статьи
`name` text not null, - название статьи
`text` text, - содержание статьи
`parent` int not null, - "родительская" категория
primary key(id)
) engine=myisam default charset=utf8;
Задача: удалить категорию со всеми вложенными статьями и категориями
Если удалять категории и статьи только с id удаляемой категории, то мы не удалим все вложения.
У меня есть решение, но оно очень коряво выглядит, хотелось бы посмотреть на ваши варианты решения
Изменил: KOZZ (01.06.2011 / 06:08)
Б

Оранжевые штаны
0
Используй структуру Nested Sets. Тогда не будет такой проблемы. Удалишь все вложенное одним запросом
K
Автор
Транклюкаторщик
0
2. G_A_N_J_A_R, хм, спасибо, почитаю smile наткнулся еще на несколько хороших статей про другие виды структур, читаю klass +1
Однако вопрос пока не снимаю
K
Автор
Транклюкаторщик
0
в общем, так и не нашел нормального решения, все еще готов учиться у знающих людей smile
передавайте опыт молодежи E

Добавлено через 01:26 сек.
как - то случайно напоролся на некое каскадное удаление, но там тип таблицы не myisam , а innodb (т.к. foreign key не существуют в myisam), менять тип не хотелось бы. да и там как - то все не очень доступно было написано, недопонял
Изменил: KOZZ (01.06.2011 / 06:09)

Дедушка
0
1. eGo, я двумя запросами бил, тоже искал так и не нашел решения нормального. У меня тем более все сложнее было... Сервером базы данных был Postgres D убивал двумя запросами, первый с таблицы детей, второй бил родителя
K
Автор
Транклюкаторщик
0
не не, речь немного о другом.
то есть нужно найти всех детей как - то рекурсивно при такой структуре.
а насколько я понимаю это можно сделать только очень емким циклом с mysql запросами, что само по себе далеко не хорошо.

ВЕЛИКИЙ и УЖАСНЫЙ!
0
Так всё просто же, если это то, что я понял:

Первый запрос: выдёргиваем все статьи с id-ом категории, ну, собственно, удаляем их.
Второй запрос: удаляем категорию.

Добавлено через 05:46 сек.
$id = $_GET['id'];
$sql_one = mysql_query("DELETE FROM library_article WHERE parent = ".$id."");
$sql_two = mysql_query("DELETE FROM library_category WHERE id = ".$id."");
$sql_three = mysql_query("DELETE FROM library_category WHERE parent = ".$id."");
Как-то так, ога? =)

Добавлено через 09:07 сек.
Хотя, это если категории до второго уровня доходят...
Тебе, как я УЖЕ понял, надо для бесконечного числа подкатегорий?
Изменил: Станислав (02.06.2011 / 07:06)

ВЕЛИКИЙ и УЖАСНЫЙ!
0
В общем, у меня такая штука была, когда я года 2 назад двиг писал. Там на форуме такое дело было =) Сейчас, если найду, то напишу =)
K
Автор
Транклюкаторщик
0
7. SNELS, вся соль в том, что категории то могут быть и 5, и 10 уровня.
другими словами нужно удаление категорий произвольной вложенности.

ВЕЛИКИЙ и УЖАСНЫЙ!
0
9. eGo, адский цикл придётся делать, пожалуй =)
По-другому, думаю, не получится тут.
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск