Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.03 c
1-1155146901
Виталий Юрьевич
2006-08-09 22:08
2006.09.24
Помогите оргазизовать обновление БД из интернета.


6-1146872718
Delphi5.01
2006-05-06 03:45
2006.09.24
Компонент для работы с протоколом SSH


1-1153984107
Stanislav
2006-07-27 11:08
2006.09.24
Очистка USES


2-1157200732
Sam Stone
2006-09-02 16:38
2006.09.24
Параметр для потока


2-1157228727
redlord
2006-09-03 00:25
2006.09.24
копирование изображения с маштабированием без потерь качества




   Наверх