2013-06-11 69 views
0

我仍然是新的寫查詢MySQL的PHP​​廣告,所以我敢肯定,這是一個新手的錯誤,但我無法弄清楚。更新只有1行雖然循環錯誤

當我用Echo顯示變量時,這些顯示爲不同的值,但是當我試圖更新它的更新只有一行時。

這是後說錯誤: - 重複關鍵「主要」

我有問題,while循環進入「654-657」,但不知道在哪裏

任何幫助將升值。

<?php 

     $index = 0; 

     while($row = mysql_fetch_array($find)) 
     { 


//Take Row Value with , from "Ratings" tables and Store In Variable 

       $rating_exp = $row['ratings']; 
    echo "<br />Orignal Rating = $rating_exp<br />";   
// Use EXPLODE function to store String Value In ARRAY Very Most IMP Step.    

       $rating_exp = explode(',', $rating_exp); 

//Take First element of the arrray And Store In Variable. 

       $First_element_array = array_shift(array_values($rating_exp)); 

//Make array values = First element value Untill Array = 4. 

       $sum = 0; //Declare Variable to Store SUM value. 

       for($i = 0; $i<4 ; $i++) 
      { 
       //Create Array With First Element Value For 4 step. 
       //Store in Array 
       $rating_exp[$i] = $First_element_array; 
       $sum+=$First_element_array; 
      } 

//Convert Array to the String With , Use Function implode. 

       $string = implode(',', $rating_exp); 




      echo "<br />---------------------------------<br />"; 
//Store Values in Database For Update Rating Table 

      $update_rating_id = $row['rating_id']; 
      $update_reviewid = $row['reviewid']; 
      $update_ratings = $string; 
      $update_ratings_sum = $sum; 
      $update_ratings_qty = 4; 

      echo "update_rating_id  $update_rating_id <br />"; 
      echo "update_reviewid  $update_reviewid <br />"; 
      echo "update_ratings  $update_ratings <br />"; 
      echo "update_ratings_sum $update_ratings_sum <br />"; 
      echo "update_ratings_qty $update_ratings_qty <br />"; 
      echo "<br />---------------------------------<br />"; 
      echo "---------------------------------<br />"; 

    $Update_Rating = "UPDATE Ratings R JOIN Comment C ON C.id = R.reviewid SET R.rating_id = '$update_rating_id',R.reviewid='$update_reviewid', R.ratings='$update_ratings', R.ratings_sum ='$sum',R.ratings_qty='$update_ratings_qty' where C.pid = 763"; 
    $Update_Rating1 = mysql_query($Update_Rating); 
    if (!$Update_Rating1) die("Query failed: $Update_Rating\n" . mysql_error()); 


     $index++; 

     } 

     echo "<br /><br />Total Updated Records = $index<br />"; 
    ?> 

回答

0

它只會更新一排,因爲每次更新語句where C.pid = 763

如果這是這樣的where C.pid = $pid時間?

此外,您的$string = implode(',', $rating_exp);總是會有4個第一個項目在數組中。 for循環它分配「First_element_array」到數組中的前4個時隙之前,則該轉換爲字符串..

---更新用於從評論溶液:

的更新查詢的多個行匹配要更新,但是,ratings_id是主鍵。因此,它將成功更新第一行,然後在第二行上失敗,因爲它會嘗試更新主鍵,使其具有與我們在第一行中設置的值相同的值。

+0

C.pid不是主要的關鍵我有很多記錄具有PID = 763 –

+0

所以這則更新的收視率表具有相同值的多個行的主鍵?是R.rating_id還是R.reviewid是主鍵? – immulatin

+0

R.rating_id是主鍵 –

0

如果有人需要將來。

$Update_Rating = "UPDATE Ratings R JOIN Comment C ON C.id = R.reviewid SET R.rating_id = '$update_rating_id',R.reviewid='$update_reviewid', R.ratings='$update_ratings', R.ratings_sum ='$sum',R.ratings_qty='$update_ratings_qty' where C.id = $update_reviewid";