Mysql
 sql >> база данни >  >> RDS >> Mysql

групиране на архива по година и месец с помощта на php и mysql

Какво ще кажете за това?

$data = array();
while($row = $stmt->fetch()){
  $monthName = date("F", mktime(0, 0, 0, $row['Month'], 10));     
  $data[$row['Year']][$monthName][] = array(
   'post' => $row['postTitle'],
   'slug' => 'a-'.$row['Month'].'-'.$row['Year']
  );
}
echo '<ul>';
foreach ($data as $year => $yearData){
   echo "<li>$year<br/>";
   echo '<ul>';
   foreach ($yearData as $month => $monthData){
      echo "<li>$month<br/>";
      echo '<ul>';
      foreach ($monthData as $number => $postData){
        echo "<li><a href='${postData['slug']}'>Post $number</a><br/>";
        echo "<a href='#'>${postData['post']}</a></li>";
      }
      echo '</ul></li>';
   }
   echo '</ul></li>';
}
echo '</ul>';

Това решение го прави по начина на PHP, но трябва да можете да получите резултата и с SQL заявка, с нещо като:

SELECT
    Year(postDate) as Year, Month(postDate) as Month,
    GROUP_CONCAT(postTitle) as posts
FROM
    blog_posts_seo
GROUP BY Year, Month
ORDER BY postDate DESC

което трябва връща всички публикации, свързани по година и месец в един ред (не е тестван), разделени със запетаи. Използвайте WITH SEPARATOR опция за задаване на различен разделител (проверете документа).

Документация:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Таблица „performance_schema.session_variables“ не съществува

  2. MYSQLI::prepare() , грешка при използване на заместител :something

  3. MySQL ABS() функция – Връща абсолютната стойност на число

  4. Как да настроя PHP тестов сървър в Dreamweaver?

  5. избиране на редове, които са се появили повече от три пъти