Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

Удалить дочерние разделы (PHP5,MySQL)   Найти похожие ветки 

 
SerJaNT ©   (2006-09-02 14:08) [0]

Вопрос по PHP и MySQL.

Пишу скрипт в котором есть древовидная структура и которая создается динамически.

Есть некая таблица с полями ID и PARENT_ID. В ID хранится уникальный номер (генерируется рандомом). В PARENT_ID хранится ссылка на родителя ну тоже собственно номер родителя. Если категория корневая - то номер будет -1.   Последующие подкатегории имеют ID своего родителя,
т.е. например,
Корневой раздел (ID:888; PARENT_ID:-1)
Подраздел корневого раздела (ID:555;PARENT_ID:888)
Еще один подраздел (ID:777;PARENT_ID:555)
и так далее

Вопрос такой: как при удалении какой-либо категории (корневой или подкатегории) удалить и всех ее потомков т.е. все те категории которые находятся ниже ее ну и принадлежащие общему корневой категории?


 
SerJaNT ©   (2006-09-02 14:11) [1]

Перебирать все записи циклом мне кажется не целесообразно т.к. записей может быть больше 5000 а тут скрипт зависнет и вылетит если время выполнения привысит max_execution_time


 
Styx_   (2006-09-02 14:13) [2]

Возникает вопрос - а каков MySQL? Если не самый древний - использовать таблицы InnoDB и в свойствах FOREIGN KEY поставить ON DELETE CASCADE - и будет счастье...


 
SerJaNT ©   (2006-09-02 14:19) [3]

> Возникает вопрос - а каков MySQL? Если не самый древний
> - использовать таблицы InnoDB и в свойствах FOREIGN KEY
> поставить ON DELETE CASCADE - и будет счастье...


Это конечно все хорошо, но если уже есть база с не InnoDB таблицами, то тогда как?


 
Styx_   (2006-09-02 14:30) [4]

Преобразовать в Innodb?
Одна строчка в SQL или нажатие одной кнопки в phpMyAdmin.
А иначе - считать транзитивное замыкание - ну и работать с ним. Но тоже может быть чревато - хотя при более сложной задаче всё равно придётся :)


 
SergP.   (2006-09-02 15:05) [5]

Уровень вложенности фиксированный или нет?


 
SerJaNT ©   (2006-09-02 15:14) [6]

> Уровень вложенности фиксированный или нет?


нет


 
SergP.   (2006-09-02 15:23) [7]

База вложенные запросы поддерживает?


 
SergP.   (2006-09-02 15:25) [8]

Если версия такая что поддерживает вложенные запросы, то по идее можно было бы удалить сначала нужную категорию/подкатегорию, после чего останется вычистить из таблицы неиспользуемый мусор, т.е. дочерние категории.  
Для этого можно было бы периодически вызывать:

delete from table where parent_id not in (select id from table)
который бы удалял за раз по одному уровню.
Причем если "мусор" тебе не особо не мешает (все равно он пользователям не доступен и просто занимает лишнее место). Его можно было бы даже удалять частями.


 
SerJaNT ©   (2006-09-02 15:26) [9]

MySQL с 4 версии вроде есть



Страницы: 1 вся ветка

Текущий архив: 2006.09.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.035 c
15-1157559096
BFG9k
2006-09-06 20:11
2006.09.24
Перевод XML в HTML


15-1157366439
ddddd
2006-09-04 14:40
2006.09.24
Как в ссылке прописать место в странице?


1-1155413894
Ice
2006-08-13 00:18
2006.09.24
TStringGrid


15-1156058656
Kolan
2006-08-20 11:24
2006.09.24
Принимайте в клуб :) Тоже женился :)


3-1153728761
Opilki_Inside
2006-07-24 12:12
2006.09.24
Вопрос о использовании TZUpdateSQL из пакета ZeosDBO