php/mysql如何从不同的表中删除同名字段

php/mysql如何从不同的表中删除同名字段,php,mysql,sql,sql-delete,Php,Mysql,Sql,Sql Delete,您好,我正在建立我的第一个网站,需要一份声明来删除包含用户指定的患者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 WHE

您好,我正在建立我的第一个网站,需要一份声明来删除包含用户指定的患者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'");
我真的非常感谢你的帮助

提前感谢

编辑:

正如Mark Baker在上述声明中指出的,最好的方法是在表中正确定义外键。但是,假设它们不是,则应该将它们包装到事务中

$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)."'";
编辑:

正如Mark Baker在上述声明中指出的,最好的方法是在表中正确定义外键。但是,假设它们不是,则应该将它们包装到事务中

$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)."'";
轻松的

别忘了先格式化$patid:

$patid = mysql_real_escape_string($patid);
轻松的

别忘了先格式化$patid:

$patid = mysql_real_escape_string($patid);

我宁愿对这两条delete语句执行
storedProcess

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)");
作为旁注,如果变量的值来自外部,则查询易受攻击。请看下面的文章,了解如何预防它。通过使用
PreparedStatements
可以避免在值周围使用单引号


我宁愿对这两条delete语句执行
stored过程

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)");
作为旁注,如果变量的值来自外部,则查询易受攻击。请看下面的文章,了解如何预防它。通过使用
PreparedStatements
可以避免在值周围使用单引号


可以在一个查询中执行以下操作:

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

但是,为了保持数据完整性,这里最好的选择是在您的
预约
表上定义一个外键约束,该表引用您的
患者
表,并包含一个
on DELETE CASCADE
子句。

可以在一个查询中执行以下操作:

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

但是,为了保持数据完整性,这里最好的选择是在您的
预约
表上定义一个外键约束,该表引用您的
患者
表,并包含一个
on DELETE CASCADE
子句。

为什么不运行两个单独的DELETE命令呢?这就是级联外键是关系数据库的一个非常好的功能的地方如果您使用两个单独的delete语句,请确保将它们包装在事务中为什么不运行两个单独的delete命令?这就是关系数据库的一个非常好的功能—如果您使用两个单独的delete语句,确保你在交易中包装它们这不是唯一的方法。。。MySQL可以通过外键关系级联单个删除itself@MarkBaker-是的,但是我认为必须对询问者的表格和意图进行更多的定义。例如,用户可能不希望总是使用外键约束来正确地定义他的表。。。即使他们不使用级联删除,这也不是唯一的方法。。。MySQL可以通过外键关系级联单个删除itself@MarkBaker-是的,但是我认为必须对询问者的表格和意图进行更多的定义。例如,用户可能不希望总是使用外键约束来正确地定义他的表。。。即使他们不使用级联删除,这似乎是我用我的基本知识所能理解的唯一解决方案。。。它成功了,谢谢!!这似乎是我用我的基本知识所能理解的唯一解决办法。。。它成功了,谢谢!!