當你想刪除一個類別 - 它會首先刪除所有相關的產品與相關的組和屬性。產品有很多關係。什麼是從許多表中刪除數據的正確方法?
這是如何處理刪除類別時:
if (isset($_POST['catid']) && $_POST['catid'] > 0) {
$category_id = mysql_real_escape_string($_POST['catid']);
$SQL = "SELECT * FROM products WHERE category_id = '$category_id'";
$q_item = mysql_query($SQL);
while ($dItem = mysql_fetch_assoc($q_item)) {
$itemid = $dItem['id'];
$SQL = "SELECT * FROM option_groups WHERE item_id = " . $itemid;
$q = mysql_query($SQL);
while ($option_group = mysql_fetch_assoc($q)) {
$optionGroup = $option_group['id'];
$SQL = "SELECT * FROM options WHERE option_group_id = " . $optionGroup;
$q = mysql_query($SQL);
while ($row = mysql_fetch_assoc($q)) {
$option = $row['id'];
mysql_query("DELETE FROM options WHERE id = " . $option);
mysql_query("DELETE FROM e_groups_options WHERE option_id = " . $option);
}
mysql_query("DELETE FROM option_groups WHERE item_id = " . $itemid);
mysql_query("DELETE FROM products WHERE id = " . $itemid);
}
}
$SQL = "DELETE FROM categories WHERE id = '$category_id'";
mysql_query($SQL);
}
你可以看到,我已經使用了包括許多DELETE查詢和代碼看起來有點亂,有另一種方式,更安全?
存儲引擎是MyISAM,我在表中有超過100,000行數據(字段被索引)。
我沒有在mysql中聲明「FOREIGN KEY」。 –
@ user791022 - 好的,你有能力嗎? :) – halfer
第一個問題是,你使用MyISAM作爲選擇,還是僅僅因爲它是默認的?如果你願意,你可以用'ALTER TABLE table_name ENGINE = InnoDB';將你的表切換到InnoDB。之後,您可以使用級聯創建外鍵。 –