我正在尝试添加grade_points
字段中的所有值,例如10, 12.5, 2.1
,然后将其除以输入数据库的等级点的次数,例如24.6 / 3
。
我知道$total_rating_points
是一个数组,但我真的不知道如何转换数组,所以我可以添加总成绩点,然后除以输入的点数。我希望有人可以帮我解决这个问题吗?我一直在努力。
以下是我遇到问题的代码。
$sql2 = "SELECT grade_points
FROM grades
JOIN articles_grades ON grades.id = articles_grades.grade_id
WHERE articles_grades.users_articles_id = '$page'";
$result = mysqli_query($dbc,$sql2);
if (!mysqli_query($dbc, $sql2)) {
print mysqli_error($dbc);
return;
}
$total_rating_points = mysqli_fetch_array($result);
if (!empty($total_rating_points) && !empty($total_ratings)){
$avg = (round($total_rating_points / $total_ratings,1));
$votes = $total_ratings;
echo $avg . "/10 (" . $votes . " votes cast)";
} else {
echo '(no votes cast)';
}
以下是我正在处理的完整代码。
function getRatingText(){
$dbc = mysqli_connect ("localhost", "root", "", "sitename");
$page = '3';
$sql1 = "SELECT COUNT(users_articles_id)
FROM articles_grades
WHERE users_articles_id = '$page'";
$result = mysqli_query($dbc,$sql1);
if (!mysqli_query($dbc, $sql1)) {
print mysqli_error($dbc);
return;
}
$total_ratings = mysqli_fetch_array($result);
$sql2 = "SELECT grade_points
FROM grades
JOIN articles_grades ON grades.id = articles_grades.grade_id
WHERE articles_grades.users_articles_id = '$page'";
$result = mysqli_query($dbc,$sql2);
if (!mysqli_query($dbc, $sql2)) {
print mysqli_error($dbc);
return;
}
$total_rating_points = mysqli_fetch_array($result);
if (!empty($total_rating_points) && !empty($total_ratings)){
$avg = (round($total_rating_points / $total_ratings,1));
$votes = $total_ratings;
echo $avg . "/10 (" . $votes . " votes cast)";
} else {
echo '(no votes cast)';
}
}
答案 0 :(得分:2)
要开始,您需要从查询中获取所有值。 PHP的库只返回结果一次,所以你需要循环它并继续获得结果,直到你拥有它们。所以这样做:
$resource = mysqli_query($statement);
while ($result = mysql_fetch_array($resource))
{
$total_results_points[] = $result[0];
}
从那里,在PHP中对数组求和和平均应该相当简单:
$average = array_sum($total_rating_points) / count($total_rating_points)
简而言之,array_sum()函数返回一起添加的数组中的所有元素。 count()函数告诉您数组中有多少元素。所以使用这两个,你可以很容易地获得阵列的平均值。
答案 1 :(得分:0)
如果您对阵列中的内容感到困惑,可以使用
print_r($total_rating_points);
要查看数组中的内容。
编辑:回应评论
你必须使用一段时间。 mysqli_fetch_array检索一行,而不是所有行。所以这样的事情将是有序的:
$total_rating_points = array();
while ($rating_row = mysqli_fetch_array($result))
{
$total_rating_points[] = $rating_row[0]; //0 might be the wrong index depending on the actual query.
}
print_r($total_rating_points);
然后,您可以使用其他一些解决方案中提到的数组函数,如sum和count。
答案 2 :(得分:0)
或者你可以去:
SELECT AVG(grade_points)
FROM grades
JOIN articles_grades ON grades.id = articles_grades.grade_id
WHERE articles_grades.users_articles_id = '$page'
对mysql_fetch_array的一次调用将返回此语句返回的唯一行,一个包含一个元素的数组,这是你的平均值。