2009-11-11 3 views
0

J'essaie de stocker les dates et le nom du mois de ma base de données dans ce format. Je vise à stocker le mois, puis compter les entrées dans ce mois et ensuite stocker le compte. C'est ma boucle, mais j'ai du mal à formater le tableau correctement.Ajouter à une boucle dans PHP sans écraser

while ($row = mysql_fetch_assoc($res)) { 
    if ($row['Date'] != $prev_date) { 
     $values=array(
      $row['Date'] => $count, 
     ); 

     $prev_date = $row['Date']; 
    } 

    $count++; 
} 
print_f($values); 

Vous pouvez voir que je vais toujours écraser mon tableau précédent et que je n'ajoute pas vraiment d'entrées dans le tableau. Je ne pouvais pas comprendre comment le faire. Essentiellement, j'essaie de voir le nombre d'entrées par mois.

VIEILLE MISE À JOUR: En train d'apprendre la chose MYSQL dont un intervenant a parlé. Je vais mettre à jour quand je l'aurai.

Répondre

1

Je presque obtenu il!

$values=array(); 
    while ($row = mysql_fetch_assoc($res)) { 
     if ($row['Date'] != $prev_date) { 
      $values[$row['Date']] = $count; 

      $prev_date = $row['Date']; 
      $count = 0; 
     } 

     $count++; 

    } 

Mise à jour: besoin d'un peu d'aide avec cette partie.

Ma sortie:

Array ([9] => [10] => 999 [11] => 986) 

999 était censé être stocké dans 9 et 986 était censé être stocké dans 10.

Mise à jour: Voici mon nouveau code, je vous serais reconnaissant si quelqu'un peut me montrer un moyen plus efficace.

$sql = "SELECT MONTH(AddDate) AS Date, column_name FROM table ORDER BY AddDate ASC"; 
    $res = mysql_query($sql) or die(mysql_error()); 
    $prev_date = null; 

$values=array(); 

    while ($row = mysql_fetch_assoc($res)) { 
     if ($row['Date'] != $prev_date) { 
      $month = $row['Date']; 
      $sql = "SELECT count(MONTH(AddDate)) AS EntryAmount FROM `table` WHERE MONTH(AddDate)=$month "; 
      $countResults = mysql_query($sql) or die(mysql_error()); 
      if($entryAmount = mysql_fetch_array($countResults)) { 
       $values[$row['Date']] = $entryAmount['EntryAmount']; 
      } 
      $prev_date = $row['Date']; 
     } 
    } 

Sortie:

Array ([9] => 999 [10] => 986 [11] => 264) 
+0

parfait pour vous! . – mauris

+0

Montrez-nous la requête originale? –

+0

@Mark Mise à jour de la requête d'origine – Strawberry

0

Je ne suis pas certain de comprendre ce que vous essayez de faire. Que dis-tu de ça?

$values[$row['Date']]++; 
2

Vous pouvez faire cela en utilisant group by dans sql, certains comme ceci: select date, count(*) from table group by date

Edit: Si vous avez besoin compter que par l'utilisation de mois un peu comme ceci: select MONTH(dateField) as NewDate, count(*) FROM table GROUP BY NewDate

+4

Si c'est ce que vous essayez d'accomplir, il sera * beaucoup * plus efficace pour le faire dans la requête qu'en PHP. –

+0

D'accord, laissez-moi essayer à la place – Strawberry

+0

Je ne pouvais pas obtenir ce travail comme je le veux. Je ne sais pas quand la date commence dans ma base de données et je dois compter le nombre d'entrées pour chaque mois. Je peux seulement compter le montant de chaque mois si je peux définir WHERE Month = 'x'. Peut-être qu'il me manque quelque chose. – Strawberry

0

Que diriez-vous en boucle sur le résultat d'un quelque chose comme la requête suivante:

SELECT COUNT(MONTH(AddDate)) AS EntryAmount, MONTH(AddDate) as MonthValue FROM table GROUP BY MONTH(AddDate) 
Questions connexes