階層構造でMySQLデータベースをセットアップしました。 pages
,regions
、elements
、およびcontent
という4つのテーブルがあります。ページは上部にあり、コンテンツは下部にあります。MySQLが階層内のすべての「子」要素を削除します
を簡単にするために:カラム有する
ページ:
id
page_id
素子列を有する:
id
領域は列を有する
id
region_id
コンテンツの列があります。私はちょうどページのidを使用してページのすべての子を削除できるようにしたい
id
element_id
。
これまでは、ページの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
DELETE CASCADE'上で使用する ' – zerkms