У меня есть база данных MySQL в стиле иерархии. Существует 4 таблицы под названием pages
, regions
, elements
и content
. Страницы находятся наверху, а контент внизу.MySQL удаляет все «дочерние» элементы в иерархии
Для упрощения:
страницы имеет столбец:
id
регионы имеет столбцы:
id
page_id
элементы имеет столбцы:
id
region_id
содержание имеет столбцы:
id
element_id
Я хочу, чтобы иметь возможность удалить все дочерние страницы, используя идентификатор только страницы.
До сих пор я мог использовать вложенный оператор select для выбора нижнего содержимого с использованием идентификатора страницы, но не выбирает элементы, регионы или страницу.
SELECT * FROM `content` WHERE `element_id` IN (
SELECT `id` FROM `elements` WHERE `region_id` IN (
SELECT `id` FROM `regions` WHERE `page_id` IN (
SELECT `id` FROM `pages` WHERE `id` = 1
)
)
)
В любом случае, для этого эффективно? Благодарю.
Благодаря @Hago и @Churk, вот мое окончательное решение (в основном код Churk, в чуть-чуть изменен):
DELETE `content`, `elements`, `regions` FROM `content`
JOIN `elements` ON `elements`.`id` = `content`.`element_id`
JOIN `regions` ON `regions`.`id` = `elements`.`region_id`
JOIN `pages` ON `pages`.`id` = `regions`.`page_id`
WHERE `pages`.`id` = 1
Использование 'ON DELETE CASCADE' – zerkms