2010-08-20 8 views
0

J'ai du code qui génère une barre latérale des archives de nouvelles. Tout fonctionne très bien en dehors du fait qu'il ne divise pas les mois par année correctement. Plutôt que d'affecter le mois pertinent à son année, tous les mois sont affichés pour toutes les années! Très frustrant! Toute aide serait grandement appréciée.Nouvelles/archives du groupe PHP/MySQL par année puis par mois

$query = "SELECT * FROM isnews WHERE active = '1' ORDER BY YEAR(date) DESC, MONTH(date) DESC"; 
$resultSet = mysql_query($query); 

if (mysql_num_rows($resultSet)){ 
    $newsArray = array(); 

    echo '<ul>' . PHP_EOL; 
    echo '<li><strong>Press releases:</strong></li>' . PHP_EOL;            

    while ($newsResult = mysql_fetch_array($resultSet)){ 
     $newDate = $newsResult['date'] ; 
     $timePeriod = date('F Y ',strtotime($newDate)); 
     $timePeriodY = date('Y',strtotime($timePeriod)); 
     $timePeriodM = date('F',strtotime($timePeriod));           

     if (!isset($newsArray[$timePeriod])){ 
       $newsArray[$timePeriod] = array(); 
     }   
     $newsArray[$timePeriod][] = $newsResult;          
    }           

    //by year 
    foreach ($newsArray as $timePeriod => $newsItems){ 
     $timePeriodY = date('Y',strtotime($timePeriod)); 
     echo '<li><strong>' . $timePeriodY . '</strong>' . PHP_EOL; 
     echo '<ul>' . PHP_EOL; 

     //by month 
     foreach ($newsArray as $timePeriod => $newsItems){ 
      echo '<li><strong>' . $timePeriod . '</strong>' . PHP_EOL; 
      echo '<ul>' . PHP_EOL;         

      //news items 
      foreach ($newsItems as $item){ 
       echo '<li>'; 
       echo '<a href="'.$wwwUrl.'press-releases/'.$item["id"].'/'.$item["title"].'.php">'.$item["title"].'</a>'; 
       echo '</li>' . PHP_EOL; 
      }  

      //end by month 
      echo '</ul>' . PHP_EOL; 
      echo '</li>' . PHP_EOL;     
     } 

     //end by year 
     echo '</ul>' . PHP_EOL; 
     echo '</li>' . PHP_EOL;     
    } 

    echo '<li>&nbsp;</li>' . PHP_EOL; 
    echo '</ul>' . PHP_EOL; 
} else { 
    echo 'We currently have no press releases available'; 
} 

Un grand merci à l'avance S

+0

[** Veuillez ne pas utiliser les fonctions 'mysql_ *' dans le nouveau code **] (http://bit.ly/phpmsql). Ils ne sont plus maintenus et le [processus de dépréciation] (http://j.mp/Rj2iVR) a commencé dessus. Voir la [** boîte rouge **] (http://j.mp/Te9zIL)? En savoir plus sur [* instructions préparées *] (http://j.mp/T9hLWi) à la place, et utiliser [PDO] (http://php.net/pdo) ou [MySQLi] (http://php.net/ mysqli) - [cet article] (http://j.mp/QEx8IB) vous aidera à décider lequel. Si vous choisissez PDO, [voici un bon tutoriel] (http://j.mp/PoWehJ). –

Répondre

0

Vous devez être en utilisant:

ORDER BY abc, xyz DESC 
0

Pourquoi Vous ne avez qu'à utiliser

ORDER BY date DESC 
0

Lorsque vous imprimez, pourquoi sont vous itérez à travers le $newsArray deux fois (quand vous avez le foreach dans foreach)? Peut-être que je manque quelque chose, mais fondamentalement pour chaque mois/année dans le tableau que vous imprimez toutes les nouvelles pour tous les mois/années. Garder juste le foreach intérieur devrait résoudre le problème.