1

こんにちは、私は最初の Web サイトを構築しています。ユーザーが指定した Patient_ID を含む 2 つのテーブルからすべてのレコードを削除するステートメントが必要です。

私が試してみました

mysql_query("DELETE FROM appointment 
  WHERE Patient_ID='$patid'
  UNION
  DELETE FROM patient 
  WHERE Patient_ID='$patid'");

そしてまた

  mysql_query("DELETE FROM appointment INNER JOIN patient 
  WHERE Patient_ID='$patid'");

これについての助けを本当に感謝します!

前もって感謝します

4

4 に答える 4

4

私はむしろStoredProcedure2つのdeleteステートメントに対してaを実行したいと思います。

DELIMITER $$
CREATE PROCEDURE DeletePatient(IN PatientID INT)
BEGIN
    DELETE FROM appointment WHERE Patient_ID = PatientID;
    DELETE FROM patient WHERE Patient_ID = PatientID;
END $$
DELIMITER ;

そしてあなたのphpスクリプトで、

mysql_query("CALL DeletePatient($patid)");

SQL Injection補足として、変数の値(s)が外部からのものである場合、クエリは脆弱です。それを防ぐ方法については、以下の記事をご覧ください。を使用PreparedStatementsすると、値を一重引用符で囲む必要がなくなります。

于 2013-02-14T13:19:35.940 に答える
1

1つのクエリで実行できます。

$query = "DELETE FROM appointment, patient USING patient INNER JOIN appointment ON (patient.patient_id = appointment.patient_id) WHERE patient.patient_id = '" . intval($patid) . "'";

ただし、データの整合性を維持するための最良のオプションは、appointmentテーブルを参照し、句patientを含む外部キー制約をテーブルに定義することです。ON DELETE CASCADE

于 2013-02-14T13:21:22.587 に答える
1

簡単

mysql_query("DELETE FROM appointment WHERE Patient_ID='$patid'");
mysql_query("DELETE FROM patient WHERE Patient_ID='$patid'");

最初に $patid をフォーマットすることを忘れないでください:

$patid = mysql_real_escape_string($patid);
于 2013-02-14T13:19:25.070 に答える
0

編集:

上記のステートメントで Mark Ba​​ker が指摘したように、最善の方法は、外部キーがテーブルで適切に定義されている場合です。ただし、そうでない場合は、トランザクションにラップする必要があります。

$query1 = "DELETE FROM appointment WHERE Patient_ID='".intval($patid)."'";
$query2 = "DELETE FROM patient WHERE Patient_ID='".intval($patid)."'";

mysql_query("START TRANSACTION", $yourConnection); 
mysql_query("BEGIN", $yourConnection); 
mysql_query($query1, $yourConnection); 
mysql_query($query2, $yourConnection); 
mysql_query("COMMIT", $yourConnection); 

元の回答:

これを行う唯一の方法は、2 つの個別の DELETE コマンドを実行することです。

$query1 = "DELETE FROM appointment WHERE Patient_ID='".intval($patid)."'";
$query2 = "DELETE FROM patient WHERE Patient_ID='".intval($patid)."'";
于 2013-02-14T13:19:21.597 に答える