PHP &

3 Cevap php

I 10, 12.5, 2.1, örneğin grade_points alanındaki tüm değerleri eklemek için çalışıyor ve örneğin veritabanına girilen sonra nereye kaç kez sınıf puan bölün ediyorum {[(2) }].

I $total_rating_points bir dizi olduğunu biliyorum ama toplam notu noktaları ekleyebilir ve ardından girilen nerede kaç kez puan bölün böylece ben gerçekten diziyi dönüştürme nasıl bilmiyorum. Birisi bu sorunu bana yardımcı olabilir eğer ben umuyordum? Ben sonsuza kadar çalışıyor olması.

İşte ben sorun yaşıyorum kodudur.

$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)';
}

Burada üzerinde çalışıyorum tam kodudur.

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 Cevap

Başlamak için, sorgudan değerleri TÜM kapmak gerekir. PHP'nin kütüphanesi yalnızca sonuçlarını one row at a time döndürür yüzden bunun üzerinde döngü gerekir ve tüm bunları bulana kadar sonuç almak için devam ediyor. Yani bu do:

$resource = mysqli_query($statement);
while ($result = mysql_fetch_array($resource))
{
    $total_results_points[] = $result[0];
}

Oradan toplanmasıyla ve PHP dizi ortalamasını oldukça basit olmalıdır:

$average = array_sum($total_rating_points) / count($total_rating_points)

Özetle, array_sum () fonksiyonu birlikte ilave bir dizideki tüm öğeleri döndürür. Count () işlevi dizideki kaç unsurlar söyler. Yani ikisini kullanarak, size oldukça kolay dizinin ortalamasını alabilirsiniz.

Yoksa sadece gidebiliriz:

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 için yapılan bir çağrı bu deyim tarafından döndürülen tek satır dönecektir, bir eleman içeren bir dizi, ortalama var.

Eğer kullanabileceğiniz bir dizide ne hakkında karıştı olduğunuzda

print_r($total_rating_points); 

Dizide neler olduğunu görmek için.

EDIT: comment yanıt

Bir süre kullanmak zorunda. mysqli_fetch_array bir satır değil, tüm satırlar alır. Yani böyle bir şey sırayla olacak:

$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);

Daha sonra toplamı gibi dizi fonksiyonlarını kullanabilir ve diğer çözümlerin bazı belirtildiği gibi sayabilirsiniz.