【发布时间】:2015-10-02 19:57:35
【问题描述】:
我在这里有点麻烦。我的删除查询无法正常工作。 问题是我正在使用内部联接从 4 个表中删除。两个表中的数据被删除,其余两个表中没有。
问题是 post 表包含多个记录,我必须删除所有记录。但它只删除第一个。并且 fields_data 表依赖于帖子表。因此,如果我能够从 posts 表中删除所有记录,那么问题也将在 fields_data 表中得到解决。
总结一下,我想做的就是根据以下查询从四个表(“Workspace_name”,“Posts”,“Fields”,“Fields_data”)中删除所有数据。我希望这对你有意义。代码写在下面。
感谢您的宝贵时间。更重要的是,它打印成功消息(Workspaces have been deleted)的次数与帖子表中的记录数一样多。但显然除了第一个之外它不会删除..
<?php
include "connection.php";
$sel="SELECT * FROM `posts` WHERE `workspace_id`='$workspace_id'";
$qus=mysqli_query($con,$sel);
$counter=mysqli_num_rows($qus);
if($qus){
$pids=array();
while($res=mysqli_fetch_assoc($qus)){
$res['post_id'];
$pids[]=$res['post_id'];
}
}
else{
echo mysqli_error($con);
}
for($i=0;$i<$counter;$i++){
$dew="DELETE wn,f,p,fd
FROM `workspace_name` AS wn
INNER JOIN `fields` AS f
INNER JOIN `posts` AS p
INNER JOIN `fields_data` AS fd
ON wn.workspace_id=f.workspace_id AND p.post_id=fd.post_id
WHERE wn.workspace_id='$workspace_id' AND p.post_id='$pids[$i]'";
$quer=mysqli_query($con,$dew);
if($quer){
echo "Workspace and its corresponding fields have been deleted.. ";
}
else{
echo mysqli_error($con);
}
}
?>
【问题讨论】:
-
参照完整性防止删除其他表?或者可能是不正确的删除顺序?
-
您缺少某些
JOIN子句的ON子句。 -
您将加入
workspace_name和fields,并加入posts和fields_data。但是没有将前两个表与后两个表关联起来的连接条件。 -
@xQbert 如果它违反了约束,我认为他会得到一个错误并且不会删除任何内容。
-
你能用示例数据制作一个 sqlfiddle,并解释应该删除哪些行吗?