PHP ve MySQL bir top 5 hesaplama

2 Cevap php

Hey I've made a rating system in php and mysql and now I want to select a top 5, I've made something but if a user adds a rating (with the max) it's nr 1 ranking.

Siz bunu PHP ve MySQL nasıl yaparsınız?

tablo şöyle:

- Id

- Orta

- Uid

- Değerlendirme

Değerlendirme 1-5 bir sayıdır

Şimdiden teşekkürler!

2 Cevap

@chaos belirttiği gibi, bu fikir:

SELECT `mid`, SUM(`rating`) AS `total`
FROM `rating`
GROUP BY `mid`
ORDER BY `total` DESC
LIMIT 5

Ancak, çok az puan değil makaleler X arasından belki de ilk 5 daha doğru bir resim verme sonucu görünecektir daha sadece makaleleri sağlayan bir eşik ekleyebilirsiniz üst-5 içine almak sağlamak için:

SELECT `mid`, SUM(`rating`) AS `total`, COUNT(1) AS `nrRatings`
FROM `rating`
GROUP BY `mid`
HAVING nrRatings > 5 // This is the threshold. Only articles with more than
                     // 5 ratings will be considered
ORDER BY `total` DESC
LIMIT 5

Ben senin ifadeler anlayış yaşıyorum, bir 1 derece yüksek gibi görünüyor? ORDER BY sonra ASC olmalıdır. AVG () SUM daha uygun olacağını düşünüyorum (). Tamamen eşik fikrine katılıyorum, yani böyle bir şey (utanmaz c / p yeniden yazma; thx @ Makinesi: P):

SELECT `mid`, AVG(`rating`) AS `avg_rating`, SUM(1) AS `nrRatings`
FROM `rating`
GROUP BY `mid`
HAVING nrRatings > 5 
ORDER BY `avg_rating` ASC
LIMIT 5