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);
Таким образом удаляем, например, меню и его подменюхи. Или категорию вместе с содержащимися в ней материалами. Главное не забыть спросить у пользователя подтверждения такого необратимого действия. Прелесть этого варианта в том, что здесь либо удаляется всё что нужно, либо ничего – запрос либо выполняется целмком либо не выполняется вообще. Т.е. нет риска удалить родителя, и при какой либо не предвиденной ошибке оставить в базе его взаимосвязанных потомков, тем самым нарушив целостность данных. Такая своеобразная транзакция...
Информация копипастерам
Внимание! Копирование контента с сайта, возможно только с разрешения администратора. Т.е. Меня! Я скорее всего разрешу Вам это сделать, в обмен на живую ссылку, на статью оригинал.