カテゴリを削除する場合は、最初に関連グループと属性を持つ関連製品をすべて削除します。製品には多くの関係があります。多くのテーブルからデータを削除する適切な方法は何ですか?
このカテゴリを削除するとき、それは対処方法です:
あなたが見ることができます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を超える行のデータがあります(フィールドはインデックスされています)。
私は「FOREIGN KEY」をmysqlで宣言しませんでした。 –
@ user791022 - 大丈夫ですか? :) – halfer
最初の質問は、MyISAMを選択肢として使用しているのか、それともデフォルトであるのかという理由だけですか?必要ならば、テーブルを 'ALTER TABLE table_name ENGINE = InnoDB';でInnoDBに切り替えることができます。その後、カスケード接続で外部キーを作成することができます。 –