我还是不习惯向mysql ad PHP编写查询,所以我确定这是一个新手的错误,但我无法弄明白。
当我使用Echo显示变量时,那些显示具有不同的值,但当我尝试仅更新它的更新时。
在说错误之后: - 为'PRIMARY'键重复输入'654-657'
我在使用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 />";
?>
答案 0 :(得分:0)
由于Update语句具有where C.pid = 763
这应该是where C.pid = $pid
吗?
此外,$string = implode(',', $rating_exp);
总是会有4个数组中的第一个项目。 for循环之前将“First_element_array”分配给数组中的前4个插槽,然后将其转换为字符串..
---来自评论的解决方案更新:
更新查询匹配要更新的多行,但,ratings_id是主键。因此,它将成功更新第一行,然后在第二行失败,因为它将尝试更新主键,使其具有我们在第一行中设置的相同值。
答案 1 :(得分: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";