/ / MySQL / PHP: Como calcular a média de uma certa coluna usando uma instrução JOIN - php, mysql

MySQL / PHP: Como calcular a média de uma certa coluna usando uma instrução JOIN - php, mysql

eu tenho um items tabela com colunas: id, name, category e um ratings tabela com colunas: id, item, rating.

Como faço para calcular a classificação média de cada item?

Eu gostaria de ter uma matriz php retornada com:

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

Esta é a minha função PHP até agora:

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();
}

Respostas:

2 para resposta № 1

Basta usar o SQL AVG() função, não há necessidade de fazê-lo em PHP. Você também precisa GROUP BY o ID do item, caso contrário, você recebe a média para cada item:

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;

Agora o rating campo em seu resultado é a média de cada item.

Você deveria ler em cima declarações preparadas. No momento, sua consulta é vulnerável a injeções de SQL.