2013-02-14 39 views
1

嗨我建設我的第一個網站,需要聲明,是由含有Patient_ID用戶指定2個表中刪除任何記錄:的PHP/MySQL如何從不同的表中刪除具有相同名稱的領域

我曾嘗試

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'"); 

會很感激一些幫助這個!

在此先感謝

+0

爲什麼不直接運行兩個單獨的DELETE命令? – 2013-02-14 13:17:36

+3

這是級聯外鍵是關係數據庫的一個奇妙功能 – 2013-02-14 13:20:52

+0

如果您確實使用兩個單獨的刪除語句,請確保您將它們包裝在一個事務中 – 2013-02-14 13:22:18

回答

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子句。

+0

這看起來似乎是我唯一的解決方案理解我的基本知識......並且工作,謝謝! – 2013-02-14 13:34:14

0

編輯:

正如馬克·貝克在上述聲明中指出,最好的辦法是,如果外鍵被放在桌子上正確定義。然而,假設它們不是,它們應該被包裝成一個交易。

$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); 

原來的答案:

做到這一點的唯一方法是運行兩個單獨的DELETE命令。

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

這不是唯一的方法來做到這一點......一個單一的刪除可以通過MySQL本身的外鍵關係級聯起來 – 2013-02-14 13:21:40

+0

@MarkBaker - 不錯,但是我認爲還需要對提問者的表格和意圖進行更多的定義。例如,用戶可能不希望總是級聯刪除 – 2013-02-14 13:23:41

+0

OP應該首先正確定義他的表格,並使用外鍵約束......即使他們不使用級聯刪除 – 2013-02-14 13:25:18

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); 
4

我寧願兩個刪除報表做StoredProcedure

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脆弱的,如果變量的值(小號)從外面走了進來。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

相關問題