2017-05-11 4 views
-1

平均格付けシステムの計算方法はちょっと分かりません。ユーザは、完全に速度を与えるために有効にし、以下の画像PHPの平均格付けシステムを計算する

Rating Table

に示すようにアイデアはaveragestarの値が平均レーティングテーブルから来ているデータベースに格納されます。たとえば、prov @ gmailの入力レートは4であり、平均値は4で、16/4になります。 (合計星/合計金額)

以下のコードから、私の論理は間違っていると思います。 UPDATE averagerating SQLが機能していません。

$sql= " 
INSERT INTO rating VALUES 
(DEFAULT,'$prov', '$star','$detail', '$user') 
"; 

$sql2=" 
DELETE FROM orderform 
WHERE confirmation = 4 
    AND provider_username = '$prov' 
    AND user_username = '$user' 
    AND confirmation = 4 
"; 

$sql3= " 
SELECT AVG(rating) 
    FROM rating 
WHERE provider_username = '$prov' 
"; 

if (mysqli_query($conn, $sql) && mysqli_query($conn, $sql2)) { 
$result = mysqli_query($conn, $sql3); 
while($row = mysqli_fetch_array($result)) { 
$sql= " 
UPDATE theprovider 
    SET averagerating = '$result' 
WHERE provider_username = '$prov'"; 
if (mysqli_query($conn, $sql)) { 
echo 'success';  
} 
} 

何か助けてください。

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-veryを参照してください。 -simple-sql-query – Strawberry

答えて

0

SET averagerating='$result'はできません。$ rowのもので更新する必要があります。

試してみてください。

$sql= "INSERT INTO rating VALUES (DEFAULT,'$prov', '$star','$detail', '$user')"; 
$sql2="DELETE FROM orderform WHERE confirmation=4 AND provider_username='$prov' AND user_username='$user' AND confirmation=4"; 
$sql3= "SELECT AVG(rating) AS myAvg FROM rating WHERE provider_username='$prov' GROUP BY provider_username"; 

if (mysqli_query($conn, $sql) && mysqli_query($conn, $sql2)) { 
$result = mysqli_query($conn, $sql3); 
while($row = mysqli_fetch_array($result)) { 
$sql= "UPDATE theprovider SET averagerating='".$row["myAvg"]."' WHERE provider_username='$prov'"; 
if (mysqli_query($conn, $sql)) { 
echo 'success';  
} 
} 

編集:追加GROUP BY句。

+0

ありがとうございました!期待どおりに動作する –

0

AVGはアグリゲータ関数なので、GROUP BYで使用する必要があります。

SELECT AVG(rating) FROM rating WHERE provider_username = '[email protected]' GROUP BY provider_username;