2011-02-16 3 views
0

Je dois fournir des rapports mensuels sur la bande passante utilisée depuis notre base de données mysql depuis un mois et une année donnés, par ex. Novembre 2009. Je peux générer les données correctes pour un mois particulier en utilisant la requête suivante;Obtenir des données pour chaque mois du mois défini au mois en cours

$query='SELECT SUM(radacct.AcctInputOctets) AS uploads,SUM(radacct.AcctOutputOctets) AS downloads FROM radacct WHERE radacct.AcctStartTime BETWEEN "2010-11-00" AND "2010-12-00"'; 
    $result = mysql_query($query); 
    $row = mysql_fetch_array($result); 
    echo '<tr><td>December</td><td>'.$uploads.'</td><td>'.$downloads.'</td></tr>'; 

je dois mettre cela en une boucle qui commence à partir d'un mois défini à savoir $ start = « 2009-11-00 » et imprime un enregistrement pour chaque mois jusqu'à et y compris le mois en cours. Peu importe ce que j'essaie, je ne peux pas le faire fonctionner!

+1

Vous dites « quel que soit ce que vous essayez ", qu'avez-vous essayé? Il semble qu'une boucle assez simple, ajoutant un mois aux dates de début et de fin jusqu'à une date spécifiée, suffirait. – anothershrubery

+0

d'abord vous aurez besoin de quelques mois générateur et calculer combien de mois il faut interroger (N fois) .. et bien alors c'est juste une boucle de 0 à N et de générer mois, l'envoyer pour la requête et l'ajout de résultats .. pas très bon à php si juste idée .. – Raven

Répondre

2

Ajout d'un paramètre de regroupement:

SELECT year(radacct.AcctStartTime), month(radacct.AcctStartTime), ... 
FROM ... 
WHERE radacct.AcctStartTime > '2010-09-00' 
GROUP BY year(radacct.AcctStartTime), month(radacct.AcctStartTime) 

qui vous donnera des données sommaires pour chaque année/mois qui a au moins une entrée dans la base de données, depuis septembre 2010.

+0

Quelle solution extrêmement élégante, beaucoup plus rapide que prévu. – Michelle

Questions connexes