2011-05-09 3 views
0

Essayer d'obtenir mes résultats triés par mois et affichés dans un tableau. Où vais-je mal?MySQL Trier par mois dans le script PHP

Requête:

mysql_query("SELECT COUNT(*), DATE_FORMAT(DATE(`dPostDateTime`), '%W, %b, %e') AS `day`, DATE(`dPostDateTime`) AS 'date' FROM `tblQA` WHERE cCategory IN ('Football','Baseball','Basketball','Hockey') AND dPostDateTime >= '2010-08-01' AND dPostDateTime <= '2011-07-31' GROUP BY `month`"); 

Code PHP:

while($row = mysql_fetch_assoc($monthlyQ)) 
{ 
$printedRecords1++; 
echo "<tr class='forum'>"; 
echo "<td class='forum'>" . $row['month'] . "</td>"; 
echo "<td class='forum'>" . $row['COUNT(*)'] . "</td>"; 
echo "</tr>"; 
} 
for ($i = $printedRecords1; $i < $Print; $i++) { 
echo "<tr class='forum'>"; 
echo "<td class='forum'>&nbsp;</td>"; 
echo "<td class='forum'>&nbsp;</td>"; 
echo "</tr>"; 
} 
echo "</table></td><td>"; 
+1

pourquoi ne pas trier par mois dans la requête? –

Répondre

0

Je suppose que quand vous dites que vous essayez Pour trier par mois, vous voulez juste dire que vous essayez de comprendre combien de lignes sont dans chaque mois, puisque cela ressemble à ce que fait votre code.

Si vous avez réellement un champ 'month' dans votre table, alors votre SQL est correct, sauf que vous ne sélectionnez jamais ce champ, donc $row['month'] ne devrait pas avoir de valeur avec ce SQL.
donc vous devez le sélectionner comme ci-dessous:

mysql_query("SELECT COUNT(*), `month`, DATE_FORMAT(DATE(`dPostDateTime`), '%W, %b, %e') AS `day`, DATE(`dPostDateTime`) AS 'date' FROM `tblQA` WHERE cCategory IN ('Football','Baseball','Basketball','Hockey') AND dPostDateTime >= '2010-08-01' AND dPostDateTime <= '2011-07-31' GROUP BY `month`"); 

Si vous ne disposez pas d'un champ « mois » (et juste le champ de date, ce qui signifierait votre requête comme donnée ne devrait pas travailler) vous devez créer cela de la même manière que votre «jour».

mysql_query("SELECT COUNT(*), MONTH(`dPostDateTime`) AS `month`, DATE_FORMAT(DATE(`dPostDateTime`), '%W, %b, %e') AS `day`, DATE(`dPostDateTime`) AS 'date' FROM `tblQA` WHERE cCategory IN ('Football','Baseball','Basketball','Hockey') AND dPostDateTime >= '2010-08-01' AND dPostDateTime <= '2011-07-31' GROUP BY `month`"); 

Ensuite, si vous voulez que vos résultats à commander par mois et, donc la table va dans un ordre cronological, vous voulez ajouter ORDER BY month là aussi, en supposant qu'il existe (comme dans exemple 1) ou vous le créez (comme dans l'exemple 2).

+0

Comment puis-je commander par mois si j'utilise MONTHNAME à la place? – BigMike

+0

Vous pouvez vraiment juste 'ORDER BY dPostDataTime', il va juste ordonner toutes vos lignes, puisque vous ne faites que grouper par mois cela n'a pas d'importance. Probablement la solution la plus simple qui fonctionnera, quoi qu'il arrive. – John

0

Si vous voulez les trier par mois, alors vous devez ajouter

ORDER BY `month` 

à votre SQL

+0

plus comme 'ORDER BY MONTH (dPostDateTime)' - il n'y a pas de champ mois dans l'exemple de requête. –

+0

@ Marc B: Vous avez probablement raison. Il y a un "GROUPE PAR mois", et une variable "mois" qui m'a jeté. –