Удаление всего содержимого каталога

1. юЮЮфюв (05.02.2013 / 05:46)
Добрый день.
Помогите составить алгоритм удаления (если это вообще возможно).
Имеются 2 таблицы catalog и pages.
Структура таблицы catalog:
-id id каталога
-name имя каталога
-subcat id материнского каталога

Структура таблицы pages:
-id id страницы
-name имя страницы
-cat id каталога в котором расположена статья

Ну так вот. Предположим, что имеется такая структура:
-Каталог 1
--Каталог 2
---Каталог 3
----Статья 1
----Статья 2

Необходимо Удалить Каталог 1 и всё, что находится ниже. Как это реализовать? Желательно привести пример с использованием PDO как в роторе (если нет возможности, то на простом MySql).

Добавлено через 03:31 сек.
Даже лучше просто объясните, как определить id всего того, что ниже Каталог 1

2. Кевин Митник (05.02.2013 / 06:09)
Рекурсия или вторичные ключи. Или то и то вместе взятое.

3. юЮЮфюв (05.02.2013 / 06:18)
Дело в том, что подразумевается бесконечная вложенность каталогов. А прибегать к таким строкам «1, 6, 7, 8...» в таблице не очень правильно

4. Кевин Митник (05.02.2013 / 06:41)
разные бывают ситуации. бывает что нужно.
В твоем случае, если нет внешних ключей, нужно рекурсией вычислять. При условии, что есть ступенчатая связь(статья 1 в каталоге 1, каталог 1 в разделе 1), можно реализовать. Создаем выборку, в которой берем все записи каталога1, далее запросы(а их столько, сколько записей) в которых выбираем все статьи из следующего уровня и так пока не вернет NULL. Может не ясно что-то написал, просто устал немного)

5. Дмитрий (05.02.2013 / 06:57)
DELETE `catalog`,`pages` 
FROM `catalog` 
LEFT JOIN `pages` ON `catalog`.`id`=`pages.`cat` 
WHERE `catalog`.`id`=[color=#ff0000]1[/color];
Удалит из таблицы catalog строку с id=1 и все строки в таблице pages, в которых ячейка cat=1

6. юЮЮфюв (05.02.2013 / 07:01)
5, а если в этом каталоге еще 50 подкаталогов, в которых тоже есть подкаталоги со статьями?

7. Петр (05.02.2013 / 09:41)
Задача аналогичная выводу комментариев. Чтобы "определить id всего того, что ниже Каталог 1" среди каталогов нужно делать запросы вида
select id from catalog where subcat in 
(здесь список id, возвращенного предыдущим таким запросом, в начале состоит просто из единицы)
Дальше, когда у нас есть список всех каталогов, все довольно очевидно

8. юЮЮфюв (05.02.2013 / 09:49)
7, О, вот это уже интересно, спасибо) попробую

URL: https://visavi.net/topics/36576