2

データベースからの削除に取り組んでいますが、テーブルを結合するのではなく、costume_id(主キー) を選択してその方法で削除しようとしましたが、すべてのテーブルではなく 1 つのテーブルからのみ削除されているようです。主キーの前に外部キーを削除しようとしましたが、うまくいきません。テーブルに参加してから削除する必要がありますか、それとも私のやり方はうまくいきますか?

   $select =  $mysqli->query("SELECT * FROM costumes WHERE $q");
   while ($row = $select->fetch_assoc())
            $db_id = $row["costume_id"];

   $costume = $mysqli->query("DELETE FROM costumes WHERE costume_id='$db_id'");
   $costume_row = $costume->fetch_assoc();

   $history = $mysqli->query("DELETE FROM history WHERE history_id='$db_id'");
   $history_row = $history->fetch_assoc();

   $location = $mysqli->query("DELETE FROM location WHERE location_id='$db_id'");
   $location_row = $location->fetch_assoc();

   $state = $mysqli->query("DELETE FROM state WHERE state_id='$db_id'");
   $state_row = $state->fetch_assoc();

$q はサブストリームです。私のテーブルには次のものがあります:

costumes (
  costume_id varchar(10) primary key,
  name varchar(50), 
  is_seperate bool, 
  is_onepeice bool, 
  description text, 
  color varchar(25), 
  material varchar(50), 
  genre varchar(25), 
  gender char(1), 
  size varchar(5)
);
state (
  state_id varchar(10), 
  in_use bool, 
  fixed bool, 
  condition text, 
  foreign key (state_id) references costume(costume_id)
);
history (
  history_id varchar(10), 
  previous_user varchar(20), 
  profession varchar(20), 
  previous_play varchar(50), 
  date date, fixed_previous bool, 
  comments text, 
  foreign key (history_id) references costume (costume_id)
);
location (
  location_id varchar(10), 
  loc_no varchar(10) primary key, 
  room_no varchar(3), 
  foreign key (location_id) references costumes (costume_id)
);

削除のための私の新しいクエリは次のとおりです。

 $delete = $mysqli->query("DELETE costumes,history,status,location FROM costumes join   history on costumes.costume_id = history.history_id join status on status.status_id join location on location.location_id where costume_id='$db_id'");

そのクエリは私に制約の問題を与えています

4

3 に答える 3

3

delete ステートメント内でテーブルを結合する必要があります。したがって、このクエリを終了してから試してください。

DELETE costumes, history
FROM costumes JOIN history ON costume.costume_id = history.costume_id
WHERE costume_id = '$db_id';

テーブルがどのように構造化されているか正確にはわからないので、通常の結合方法に合わせて結合構文を修正する必要があります。さらにヘルプが必要な場合は、質問を編集して、2 つのテーブルのすべてのフィールド名をお知らせください。

于 2012-12-05T07:38:05.640 に答える
1

ON DELETE CASCADE外部キーの属性を使用する必要があると思います。これを使用して、コスチュームを削除すると、そのカスタムも履歴テーブルから削除されます。

于 2012-12-05T08:03:05.967 に答える
0

これを試して::

DELETE from costumes where costumeid in 
(
Select temp_costume.id from
( Select costume_id as id from table....
) as temp_costume
于 2012-12-05T07:39:12.837 に答える