Удаление категории (структура с parent_dir)
1.
KOZZ (13.04.2011 / 07:56)
Давно мучает вопрос.
Допустим, скрипт библиотеки.
категории и статьи пишем 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 удаляемой категории, то мы не удалим все вложения.
У меня есть решение, но оно очень коряво выглядит, хотелось бы посмотреть на ваши варианты решения
2.
Богдан (13.04.2011 / 10:24)
Используй структуру Nested Sets. Тогда не будет такой проблемы. Удалишь все вложенное одним запросом
3.
KOZZ (13.04.2011 / 10:35)
2.
G_A_N_J_A_R, хм, спасибо, почитаю
наткнулся еще на несколько хороших статей про другие виды структур, читаю
+1
Однако вопрос пока не снимаю
4.
KOZZ (01.06.2011 / 06:06)
в общем, так и не нашел нормального решения, все еще готов учиться у знающих людей
передавайте опыт молодежи
Добавлено через 01:26 сек.
как - то случайно напоролся на некое каскадное удаление, но там тип таблицы не myisam , а innodb (т.к. foreign key не существуют в myisam), менять тип не хотелось бы. да и там как - то все не очень доступно было написано, недопонял
5.
Женек (01.06.2011 / 12:31)
1.
eGo, я двумя запросами бил, тоже искал так и не нашел решения нормального. У меня тем более все сложнее было... Сервером базы данных был Postgres
убивал двумя запросами, первый с таблицы детей, второй бил родителя
6.
KOZZ (02.06.2011 / 06:36)
не не, речь немного о другом.
то есть нужно найти всех детей как - то рекурсивно при такой структуре.
а насколько я понимаю это можно сделать только очень емким циклом с mysql запросами, что само по себе далеко не хорошо.
7.
Станислав (02.06.2011 / 06:59)
Так всё просто же, если это то, что я понял:
Первый запрос: выдёргиваем все статьи с 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 сек.
Хотя, это если категории до второго уровня доходят...
Тебе, как я УЖЕ понял, надо для бесконечного числа подкатегорий?
8.
Станислав (02.06.2011 / 07:19)
В общем, у меня такая штука была, когда я года 2 назад двиг писал. Там на форуме такое дело было =) Сейчас, если найду, то напишу =)
9.
KOZZ (02.06.2011 / 09:36)
7.
SNELS, вся соль в том, что категории то могут быть и 5, и 10 уровня.
другими словами нужно удаление категорий произвольной вложенности.
10.
Станислав (02.06.2011 / 10:05)
9.
eGo, адский цикл придётся делать, пожалуй =)
По-другому, думаю, не получится тут.
11.
KOZZ (02.06.2011 / 10:11)
10.
SNELS, ну вот я тоже так думаю, и другого решения не вижу.
поэтому и спрашиваю, вдруг кто делает иначе как - то.
URL:
https://visavi.net/topics/20677