2017-08-29 152 views
1

我有一個items表列計算某列的平均值。的MySQL/PHP:<code>id</code>,<code>name</code>,<code>category</code>和一個<code>ratings</code>表列:<code>id</code>,<code>item</code>,<code>rating</code>如何使用JOIN語句

如何計算每件商品的平均評分?

[id] => item.id 
[name] => item.name 
[rating] => average rating 

這是我的PHP函數至今:

我想有一個PHP數組返回

function getTopRatings($category) { 
    $pdo = Database::connect(); 
    $sql = "SELECT item, rating, items.id, items.name FROM ratings INNER JOIN items ON ratings.item=items.id WHERE category = '" . $category . "'"; 
    $pdo->query($sql); 
    foreach ($pdo->query($sql) as $row) { 
     $ratings[] = array(
      "itemid" => $row['id'], 
      "name" => $row['name'], 
      "rating" => ? 
     ); 
    } 
    Database::disconnect(); 
} 

回答

2

只需使用SQL AVG()功能,沒有必要做在PHP中。您還需要GROUP BY商品的ID,否則你會得到平均爲每個項目:

SELECT item, AVG(rating) as rating, items.id, items.name FROM ratings INNER JOIN items ON ratings.item=items.id WHERE category = '" . $category . "' GROUP BY items.id; 

現在,在您的結果rating場平均爲每個項目。

您應該閱讀prepared statements。現在,您的查詢很容易受到SQL注入的影響。

相關問題