MySQL/PHP:如何使用JOIN语句计算特定列的平均值

MySQL/PHP:如何使用JOIN语句计算特定列的平均值,php,mysql,Php,Mysql,我有一个项目表和列:id,名称,类别,还有一个评级表和列:id,项目,评级 如何计算每个项目的平均评分 我希望返回一个php数组,其中包含: [id] => item.id [name] => item.name [rating] => average rating 这是迄今为止我的PHP函数: function getTopRatings($category) { $pdo = Database::connect(); $sql = "SELECT item

我有一个
项目
表和列:
id
名称
类别
,还有一个
评级
表和列:
id
项目
评级

如何计算每个项目的平均评分

我希望返回一个php数组,其中包含:

[id] => item.id
[name] => item.name
[rating] => average rating
这是迄今为止我的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();
}
只需使用SQL
AVG()
函数,无需在PHP中执行。您还需要根据项目的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;
现在,结果中的
评分
字段是每个项目的平均值

你应该仔细阅读。现在,您的查询容易受到SQL注入的攻击