2013-04-07 5 views
0

J'essaie d'obtenir une liste de blog_id et la somme des dons sur ce blog à partir d'une table appelée dons. Et je veux le commander par la somme des dons. Fondamentalement, je veux produire une liste de blogs classés par dons. Les blogs sont stockés dans une autre table référencée par blog_id.Classement par somme (valeur) sql

C'est ce que j'ai essayé, mais tout ce qu'il fait, c'est résumer tous les dons et produire 1 rang. Je ne comprends pas ce que j'ai fait de mal ici!

$donations_result = mysql_query("SELECT blog_id, sum(amount) FROM donations ORDER BY sum(amount)"); 

La table de dons est une série de blog_ids et de dons individuels. Donc, quelque chose comme ceci:

blog_id - don
1 ---------- 26
1 ---------- 1 2 ------
---- 24
2 ---------- 12

+0

Un groupe par article devrait aider. – Sid

Répondre

3

Vous n'avez pas regroupé les colonnes. Vous devez groupe par colonne non agrégée et dans ce cas par blog_id

SELECT blog_id, sum(amount) TotalSum 
FROM donations 
GROUP BY blog_id 
ORDER BY TotalSum 

La raison pour laquelle votre requête exécutée bien sans lancer une exception est parce que MySQL permet d'utiliser fonction d'agrégation sans spécifier la colonne non agrégée dans la clause GROUP BY.

+1

Les grands esprits se ressemblent! JW a répondu en premier, alors donnez-lui le crédit! –

+1

Oh c'est pourquoi alors. Je pensais qu'il était inhabituel pour sql de faire quelque chose que je ne prévoyais pas sans cracher ... –

2

vous manquez l'opérateur GROUP BY:

SELECT blog_id, sum(amount) 
FROM  donations 
GROUP BY blog_id 
ORDER BY sum(amount) 
+1

travaillé grâce. Et ty à tous les autres aussi! Tiques pour tout le monde: D –