0

私はまだmysqlとPHPにクエリを書くのが初めてなので、初心者の間違いだと確信していますが、理解できません。

エコーで変数を表示すると、それらは異なる値で表示されますが、更新しようとすると、1行だけ更新されます。

エラーが発生した後:-キー「プライマリ」のエントリ「654-657」が重複しています

While LOOP に問題がありますが、場所がわかりません

どんな助けでも感謝します。

    <?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 />";
    ?>
4

2 に答える 2

0

Update ステートメントがwhere C.pid = 763

これは次のようなものwhere C.pid = $pidですか?

また$string = implode(',', $rating_exp);、配列の最初の項目は常に 4 つになります。「First_element_array」を配列の最初の 4 つのスロットに割り当てる前の for ループは、それを文字列に変換します。

--- コメントからの解決策の更新:

更新クエリは、更新される複数の行に一致しますが、rating_id は主キーです。したがって、最初の行は正常に更新されますが、最初の行で設定した値と同じ値になるように主キーを更新しようとするため、2 行目で失敗します。

于 2013-06-11T19:55:49.307 に答える
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";
于 2013-06-11T20:55:41.337 に答える