2013-04-04 72 views
2

假設我有以下MySQL表;每月創建表

id  | title | date 
--------+---------+---------- 
0  | john doe| 2013-02-01 
2  | tarzan | 2013-04-01 
9  | toy-box | 2013-04-02 
11  | jane | 2013-01-01 

我想獲取所有這些結果,每月,每年,我想創建一個HTML表:

January, 2013 
[*] Jane 

February, 2013 
[*] John doe 

April, 2013 
[*] Tarzan 
[*] toy-box 

正如你可以看到,三月不存在。我怎樣才能用PHP生成這樣的東西?

+1

我可能會創建一年中所有月份的數組,然後從數據庫中獲取數據,將數據庫值與數組進行匹配並填充空位。應該相當容易。 – Pankucins 2013-04-04 10:54:19

+0

你需要所有月份嗎?那些不在給定的表也。假設,行軍不在表中,但你想在HTML表中看到。是嗎 ? – 2013-04-04 10:59:33

+0

@JDeveloper不,有些月份不會顯示在我的表格中。 – Thijmen 2013-04-04 11:08:06

回答

4

只是按月(也許標題)使用SQL的順序。然後做這樣的事情:

$lastMonthId = null; 

foreach ($records as $record) { 
    $date = strtotime($record['date']); 

    $monthId = date('Ym', $date); 
    if ($monthId !== $lastMonthId) { 
     if ($lastMonthId !== null) echo '</table>'; 
     echo '<h1>', date('Y-m', $date), '</h1>'; 
     echo '<table>'; 

     $lastMonthId = $monthId; 
    } 

    // Output <tr> for this record. 
} 

echo '</table>'; 

這將啓動一個新的表,每次從一個記錄到下一個月更改。

這當然不會顯示空的月份,因爲它們不在數據集中。

此外,它還挺看起來像你居然想在這裏的列表。如果是這種情況,則分別用<ul>,</ul><li>分別代替<table>,</table><tr>

+0

我個人喜歡這種方法,因爲如果你想以排序的形式輸出+ 1,排序將刪除某些數組中檢查的依賴 – Devesh 2013-04-04 11:02:07

1

如果您發現該月的任何記錄添加到數組,則使用Key創建一個數組作爲月份。最後你會有月份作爲關鍵字,並在另一個陣列中的所有名稱陣列

  $myData = array() 
     while(Looping through DB record) 
     { 
      extract Month part and check array_key_exists($myData , monthPart) 
      if yes then $myData[$key]['Name'] = UserName 
     }