Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

Удалить дочерние разделы (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.111 c
2-1157531619
webpauk
2006-09-06 12:33
2006.09.24
как определить в каком столбце DBGrid юзер кликнул мышью?


2-1157389396
_Mat_
2006-09-04 21:03
2006.09.24
Отображение текста в StatusBar


2-1157360717
com
2006-09-04 13:05
2006.09.24
Блокировщик виндувс


15-1157311852
ramzes2
2006-09-03 23:30
2006.09.24
пропадает форма


15-1157102775
ToTo
2006-09-01 13:26
2006.09.24
Читаем книги?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский