PHP& MySQL - 数学和数组问题

时间:2010-01-20 18:58:01

标签: php mysql

我正在尝试添加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)';
    }
}

3 个答案:

答案 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的一次调用将返回此语句返回的唯一行,一个包含一个元素的数组,这是你的平均值。