मेरे पास एक है items
स्तंभों के साथ तालिका: id
, name
, category
और एक ratings
स्तंभों के साथ तालिका: id
, item
, rating
.
मैं प्रत्येक आइटम के लिए औसत रेटिंग की गणना कैसे करूं?
मैं एक 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();
}
उत्तर:
जवाब के लिए 2 № 1बस एसक्यूएल का प्रयोग करें AVG()
समारोह, PHP में ऐसा करने की कोई ज़रूरत नहीं है। आपको भी जरूरत है GROUP BY
आइटम की आईडी, अन्यथा आप प्रत्येक आइटम के लिए औसत प्राप्त करें:
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
आपके परिणाम में फ़ील्ड प्रत्येक आइटम के लिए औसत है।
आपको पढ़ना चाहिए तैयार बयान। अभी, आपकी क्वेरी एसक्यूएल इंजेक्शन के लिए कमजोर है।