我在这里遇到了一些麻烦。我的删除查询无法正常工作。 我正在使用内连接从4个表中删除。数据在两个表中删除,但在其余两个表中没有。
事情是post表包含多个记录,我必须删除所有记录。但它只删除第一个。 fields_data表取决于posts表。因此,如果我能够从posts表中删除所有记录,问题也将在fields_data表中解决。
总结我要做的就是根据以下查询删除四个表(“Workspace_name”,“Posts”,“Fields”,“Fields_data”)中的所有数据。我希望它对你有意义。代码如下。
感谢您的时间。更多的事情是它打印成功消息(Workspaces have been deleted
)的次数与posts表中的记录数一样多。但显然它不会删除除了第一个..
<?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);
}
}
?>
答案 0 :(得分:1)
您在2个表ON
和field
posts
个条件
$dew="DELETE wn,f,p,fd
FROM `workspace_name` AS wn
INNER JOIN `fields` AS f _ON(wn.some_id = f.some_id)_
INNER JOIN `posts` AS p _ON(wn.some_id = c.some_id)_
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]'";
答案 1 :(得分:0)
您需要在删除查询中正确连接4个表,并且不要使用循环。在第一个循环中,工作区将被删除一个帖子,但在第二次迭代中没有剩余的工作区,因此内部联接也不会从posts表中产生任何记录。
DELETE wn,f,p,fd FROM `workspace_name` AS wn INNER JOIN `fields` AS f
ON wn.workspace_id=f.workspace_id INNER JOIN `posts` AS p
ON wn.workspace_id=p.workspace_id INNER JOIN `fields_data` AS fd
ON p.post_id=fd.post_id
WHERE wn.workspace_id='$workspace_id'