Php 如何循环表中的每个值并找到平均值
我是一名初级程序员,我正在努力寻找供应商2的平均用户评级。Php 如何循环表中的每个值并找到平均值,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我是一名初级程序员,我正在努力寻找供应商2的平均用户评级。 我的步骤如下: 1.用户“Jimmy”给供应商2的评分为3(评分为5分) 2.更新了表Vendorations 3.然后,ratingstot.php计算更新前所有供应商的评级和响应总数,如下所示 4.用户“Jimmy”点击“查看平均用户评级” 5.在Javascript中检索并划分值totalratings和totalno var average= totalratings/totalno 六,。totalno显示给用户Jimm
我的步骤如下:
1.用户“Jimmy”给供应商2的评分为3(评分为5分)
2.更新了表Vendorations
3.然后,ratingstot.php计算更新前所有供应商的评级和响应总数,如下所示
4.用户“Jimmy”点击“查看平均用户评级”
5.在Javascript中检索并划分值totalratings和totalno
var average= totalratings/totalno
六,。totalno显示给用户Jimmy。结束
问题1.我需要帮助在ratingstot.php中形成for或while循环,以计算属于供应商X的评分和响应数量,然后再将它们插入每个供应商的vendor TotalRatings表中。
ratingstot.php
这个问题并没有说明这些记录是如何首先插入到vendortotalratings
表中的。因此,假设此表中每个供应商都有一条记录,您不必编写一个全新的循环
更新vendortotalratings
:
SQL可以在一个查询中计算总评分及其计数,然后替换现有的循环
UPDATE vendortotalratings vtr
INNER JOIN
(
SELECT vendorid, SUM(ratings) AS sumratings, COUNT(ratings) AS countratings
FROM vendoratings
GROUP BY vendorid
) vr
ON vtr.vendorid = vr.vendorid
SET
vtr.totalratings = vtr.totalratings + vr.sumratings
,vtr.totalno = vtr.totalno + vr.countratings
计算平均值:
至于第二个问题,要计算平均值,可以运行以下查询,该查询将给出运行时结果:
SELECT vendorid, totalratings, totalno,
CAST((totalratings/totalno) AS DECIMAL(10, 2)) AS avgrating
FROM vendortotalratings;
如果要从结果中获取关联数组,可以使用$row['avgrating']
直接在PHP中访问变量avgrating
,或者使用适当的索引号,在这种情况下,索引号应该是$row[3]
,而不是所有这些复杂的东西,您可以简化所需的解决方案,如下所示:
(假设:我假设vendorid、ratings、totalratings和totalno列的类型为INT
)
- 使用下面的语句/查询获取每个供应商ID对应的totalratings和totalno
- 现在,使用
while()
循环遍历$result
结果集
while($row = $result->fetch_array()){
...
}
- 在上述
while()
循环的每次迭代中,检查vendorid值是否已经存在。如果存在,则使用新的totalratings和totalno更新该行,否则插入包含vendorid、totalratings和totalno的新行
这正是我一直在寻找的,但更好的是,它现在正在工作,非常感谢您的回复!
$result = $conn->query("SELECT vendorid, SUM(ratings) as totalratings, COUNT(userid) as totalno FROM vendorratings GROUP BY vendorid");
while($row = $result->fetch_array()){
...
}
while($row = $result->fetch_array()){
$res = $conn->query("SELECT vendorid FROM vendortotalratings WHERE vendorid = " . $row['vendorid']);
if($res->num_rows){
// Update the existing row
$conn->query("UPDATE vendortotalratings SET totalratings = ".$row['totalratings'].", totalno = ".$row['totalno']." WHERE vendorid = ".$row['vendorid']);
echo "Affected rows: " . $conn->affected_rows . '<br />';
}else{
// Insert a new row
$res = $conn->query("INSERT INTO vendortotalratings VALUES(".$row['vendorid'].", ".$row['totalratings'].",".$row['totalno'].")");
if($res) echo "New row inserted <br />";
}
}
// your code
try{
//Database connection
$conn = new mysqli("localhost", "XXXXXXXX_XXX", "XXXXXXXX", "XXXXXXXX");
$result = $conn->query("SELECT vendorid, SUM(ratings) as totalratings, COUNT(userid) as totalno FROM vendorratings GROUP BY vendorid");
while($row = $result->fetch_array()){
$res = $conn->query("SELECT vendorid FROM vendortotalratings WHERE vendorid = " . $row['vendorid']);
if($res->num_rows){
// Update the existing row
$conn->query("UPDATE vendortotalratings SET totalratings = ".$row['totalratings'].", totalno = ".$row['totalno']." WHERE vendorid = ".$row['vendorid']);
echo "Affected rows: " . $conn->affected_rows . '<br />';
}else{
// Insert a new row
$res = $conn->query("INSERT INTO vendortotalratings VALUES(".$row['vendorid'].", ".$row['totalratings'].",".$row['totalno'].")");
if($res) echo "New row inserted <br />";
}
}
}catch(Exception $e) {
$json_out = json_encode(array("result"=>0));
echo $json_out;
}