/ / MySQL / PHP: come calcolare la media di una determinata colonna usando un'istruzione JOIN - php, mysql

MySQL / PHP: come calcolare la media di una determinata colonna usando un'istruzione JOIN - php, mysql

ne ho una items tavolo con colonne: id, name, category e uno ratings tavolo con colonne: id, item, rating.

Come faccio a calcolare la valutazione media per ciascun articolo?

Mi piacerebbe avere un array php restituito con:

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

Questa è la mia funzione PHP finora:

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

risposte:

2 per risposta № 1

Basta usare l'SQL AVG() funzione, non c'è bisogno di farlo in PHP. È anche necessario GROUP BY l'ID dell'oggetto, altrimenti otterrai la media per ogni articolo:

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;

Ora il rating il campo nel risultato è la media per ogni articolo.

Dovresti leggere su dichiarazioni preparate. Al momento, la tua query è vulnerabile alle iniezioni SQL.