2

TV シリーズの Web サイトにバックパネルを構築しています。テーブルが 2 つあります。1 つはショーと呼ばれ、もう 1 つはシーズンと呼ばれます。

構造: ショー - show_id PK,show_title

季節 - season_id PK, show_id(外部キー),season

バックエンドのテーブルにすべてのテレビ番組名を削除ボタンでリストしていますが、削除ボタンを押してもシーズンが添付されているため、番組は削除されません。シーズンが添付されていない番組を削除しようとすると、問題なくデータベースから削除されます。

私のコードは remove.php で次のようになります。

$id=$_GET['id'];

// Delete show
$sql="DELETE FROM shows WHERE shows_id='$id'";

$result=mysql_query($sql);

同じ番組に割り当てられたシーズンも削除する必要があると思いますが、これを行う方法がわかりません。

4

2 に答える 2

1

MySQL テーブルに InnoDB を使用している場合、Foreign Key の制約を確認/変更すると、ここでの作業は非常に簡単になります。

これらの変更は、データベースを管理するためにコマンド ライン インターフェイスを使用しているか、何らかの GUI を使用しているかにかかわらず、設定方法によって異なります。

ただし、seasons テーブルに外部キー フィールドを作成したときに、制約を設定しました。その制約を次のように更新すると:

更新時: 何もしない \\ 削除時: カスケード

これで、ショーから行を削除するたびに、カスケード ルールにより、関連付けられたシーズン行が存在する場合は常に自動的に削除されます。非常に便利で、正規化されたデータベースをセットアップするために必要です。

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

于 2012-11-23T13:32:08.967 に答える
1
$id=$_GET['id'];

// Delete all seasons for this show first.
$sql="DELETE FROM seasons WHERE show_id='$id'";

// Now, Delete show
$sql="DELETE FROM shows WHERE id='$id'";
于 2012-11-23T13:10:42.913 に答える