2016-12-30 67 views
3

當從數據庫中刪除父類別(例如架構,藝術和文化)時,我希望將父類別下的所有子類別從數據庫。我不知道如何爲此編寫查詢。當我刪除父類別時,我想從數據庫中自動刪除所有子類別

我使用PHP和MySQL數據庫,類別和子類別是兩個單獨的表格,表格的快照在下面給出。

分類表

enter image description here

子目錄表

enter image description here

+5

下一次通過使用'SHOW CREATE TABLE'命令將您的表格作爲文本而不是圖像發佈。 – e4c5

+0

請注意,如果您有孩子,物品,請將其稱爲您想要的物品,在這些類別或子類別中您將擁有zombi物品,即未關聯的物品。一種選擇是刪除這些或將項目遷移到另一個類別。關於刪除,你也可以加入他們。 '刪除c,s從類別AS c JOIN子類別AS s ON c.cat_id = s.parent_id'。我可以添加的另一個提示是合併兩個表cat_id,parent_id,cat_name,但需要一些加入sql –

+0

PS:如果您將在子類別中有項目,那麼您將很難將其與父類別關聯。這就是爲什麼我建議合併2表 –

回答

6

添加有一個外鍵DELETE CASCADE

ALTER TABLE subcategory ADD FOREIGN KEY fk_parent(parent_id) 
REFERENCES category(cat_id) ON DELETE CASCADE 

當父被刪除此自動刪除子類別。請參閱https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html瞭解更多信息。

+1

真棒,謝謝:) –

+1

不客氣@SanchitGupta,你有同樣的問題,我認爲 – e4c5

+1

還沒有。但你教我新的東西:) –

0

你必須在這裏使用外鍵。所以,如果你刪除父ID那麼孩子將被自動刪除

ALTER TABLE subcategory ADD FOREIGN KEY fk_parent(parent_id) 
REFERENCES category(cat_id) ON DELETE CASCADE 
0

訣竅不在查詢中;你的SQL應該是一個正常的DELETE查詢。

你需要做的是配置FOREIGN KEYON DELETE CASCADE

請參見本教程: http://www.mysqltutorial.org/mysql-on-delete-cascade/

+0

非常感謝。這個鏈接真正解釋了一對多的關係。我現在有一個清楚的想法。 –

0
$id = 1; 
DELETE FROM category WHERE cat_id = $id; 
DELETE FROM subcategory WHERE parent_id = $id; 

如果添加DELETE CASCADE

$id = 1; 
DELETE FROM category WHERE cat_id = $id; 
0

你必須設置category and subcategory之間的關係。我的意思是category有很多subcategories。所以它應該是one-to-many的關係。當你設置這個關係時,你必須使用onDelete cascade。所以一旦類別將被刪除,那麼該子類別將自動刪除。

相關問題