DELETE из разных таблиц одним запросом

DELETE из разных таблиц одним запросом

Часто встречающаяся ситуация при разработке вэб приложений – как удалить объект из таблицы базы данных и связанные вместе сним объекты, из другой таблицы? Яркий тому пример категории и материалы, пункты меню и их подменю и т.п. Можно, а может и правильно, в таких ситуациях использовать триггеры или даже хранимые процедуры, но как правило PHP программисты не углубляются настолько в дебри SQL, и ваш покорный слуга не исключение. Посмотрим, как можно обойтись простым запросом:

 

DELETE

    `menu`, `submenu`

FROM

    `menu`

LEFT JOIN

    `submenu`

ON

    (`menu`.`id` = `submenu`.`id`)

WHERE

    `menu`.`id` = 1;

или несколько объектов и их зависимости:

 

DELETE

    `menu`, `submenu`

FROM

    `menu`

LEFT JOIN

    `submenu`

ON

    (`menu`.`id` = `submenu`.`id`)

WHERE

    `menu`.`id` IN(1,2,3,4);

Таким образом удаляем, например, меню и его подменюхи. Или категорию вместе с содержащимися в ней материалами. Главное не забыть спросить у пользователя подтверждения такого необратимого действия. Прелесть этого варианта в том, что здесь либо удаляется всё что нужно, либо ничего – запрос либо выполняется целмком либо не выполняется вообще. Т.е. нет риска удалить родителя, и при какой либо не предвиденной ошибке оставить в базе его взаимосвязанных потомков, тем самым нарушив целостность данных. Такая своеобразная транзакция…

 

Возможно Вас заинтересуют эти материалы

PHP: Буферизация вывода

Буферизация вывода в PHP это довольно полезная штука, если уметь ею пользоваться. Скажите сколько раз

POP3 протокол с примерами

POP3 это протокол по которому мы можем получить почту с сервера, для подобной задачи, используется

PHP: Хранение сессии в базе данных

Как и обещал, тема данной заметки: база данных, как обработчик сессии. А так как на