PHP и MySQL - математические и массивные задачи - PullRequest
1 голос
/ 20 января 2010

Я пытаюсь добавить все значения из поля 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 ]

2 голосов
/ 20 января 2010

Для начала вам нужно получить ВСЕ значения из вашего запроса. Библиотека 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 () сообщает, сколько элементов в массиве. Таким образом, используя два, вы можете довольно легко получить среднее значение массива.

0 голосов
/ 21 января 2010

Или вы можете просто пойти:

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 вернет единственную строку, возвращаемую этим оператором, массив с одним элементом, это ваше среднее значение.

0 голосов
/ 20 января 2010

Когда вы не уверены, что находится в массиве, вы можете использовать

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, как указано в некоторых других решениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...