2015-10-02 20 views
1

我在這裏遇到了一些麻煩。我的刪除查詢無法正常工作。 事情是我從4個表中刪除使用內部連接。數據在兩個表格中被刪除,但其餘兩個中沒有。我的刪除查詢無法正常工作

事情是郵政表中包含多個記錄,我必須刪除所有這些記錄。但它只刪除第一個。 fields_data表依賴於帖子表。因此,如果我能夠從帖子表中刪除所有記錄,問題也將在fields_data表中解決。

總結我想要做的是根據以下查詢從四個表(「Workspace_name」,「Posts」,「Fields」,「Fields_data」)中刪除所有數據。我希望它對你有意義。代碼如下所示。

謝謝你的時間。和更多的東西其打印成功消息(Workspaces have been deleted)多次在帖子的記錄數table.But顯然除了第一個它不刪除..

<?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); 
    } 
} 

?> 
+1

參照完整性防止刪除其他表ON條件?或者可能是一個不正確的刪除命令? – xQbert

+0

你缺少某些'JOIN'子句的'ON'子句。 – Barmar

+0

您正在通過'fields'加入'workspace_name',並通過'fields_data'連接'posts'。但是前兩個表與最後兩個表沒有聯繫條件。 – Barmar

回答

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' 
+0

你是100%正確..但我怎麼刪除多行的帖子和fields_data沒有一個循環?? –

+0

您的上述查詢將刪除所有相應的工作區文章...但如何刪除field_data中的記錄,因爲該表中沒有workspace_id列...我應該添加一個還是有另一種方式? –

+0

根據您的刪除查詢,fields_data表與post_id字段上的posts表結合在一起,所以我不明白您的問題!將我的上述查詢轉換爲select,如果它從表中選擇正確的記錄,那麼刪除將刪除正確的記錄。 – Shadow

1

你缺少2個表fieldposts

$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]'"; 
+0

這是不正確的,因爲在哪裏標準只有1個職位將被刪除。 – Shadow

+0

@shadow他在'where'的2個表上應用了條件,所以有可能所有這3個表都使用這個條件匹配 – Exception

+0

nope,請參閱問題代碼開始處的select查詢。 – Shadow