2017-08-29 298 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注入的影响。

相关问题