2010-10-17 8 views
1

J'ai une table qui contient link_ids qui se rapportent à une autre table; et cette table a une colonne intitulée ammount qui stocke les valeurs tapées int. Pour récupérer une ammount totale ainsi que des valeurs individuelles je l'ai requête comme suit:Récupérer des valeurs individuelles avec leur somme?

SELECT ip, ammount, (SELECT SUM(ammount) FROM stats WHERE link_id = $link_id) as total_ammount FROM stats WHERE link_id = $link_id 

est ici des valeurs dans le tableau stat:

stat_id, ip, ammount, link_id 
1, 211.126.197.45, 10, 3 
2, 61.158.167.84, 7, 3 

, je dois donc pour récupérer le ammount total link_id avec son ammounts individuels:

$total_ammount == 17; 
$ips[0]['ammount'] == 10; 
$ips[1]['ammount'] == 7; 

Quelque chose comme ça ... la question est de savoir si la requête est bien ou il pourrait être préférable (comment faire mieux)?

+0

"ammount" se trouve être une faute d'orthographe très commun de la mot "montant". Pas de problèmes, cependant. Si vous l'avez mal orthographié dans votre code, vous pouvez ou ne voulez pas le réparer, cependant. Cela dépend de combien de travail ce serait. Cela pourrait toutefois dérouter les autres développeurs. Ou juste mettre un grand sourire sur leurs visages. :-) –

Répondre

5

Vous pouvez utiliser GROUP BY ... WITH ROLLUP:

SELECT stat_id, SUM(ammount) AS amount 
FROM stats 
WHERE link_id = 3 
GROUP BY stat_id WITH ROLLUP 

Résultat:

 
stat_id amount 
1,  10  
2,  7  
NULL, 17  

Ou vous pouvez utiliser UNION ALL:

SELECT stat_id, ammount AS amount 
FROM stats 
WHERE link_id = 3 

UNION ALL 

SELECT NULL, SUM(ammount) 
FROM stats 
WHERE link_id = 3 
Questions connexes