2013-02-12 112 views
0

從MySQL數據庫遞歸結果我有一個簡單的數據庫,像這樣:檢索基於日期

id int 
name varchar(20) 
date date // stored as "YYYY-MM-DD HH:MM:SS" 

我有一個前端,其中,每當我輸入數據,它將始終插入數據插入日期。

我想回到像這樣使用PHP和MySQL的數據:

DATE 

id - name // however many of these fall under the same day in the database, are printed 
id - name 
id - name 

DATE 

id - name // however many of these fall under the same day in the database, are printed 
id - name 
etc 

我真的不知道如何使一個循環做到這一點。我能提取像這樣的下列數據:

<table class="table"> 
     <?php 
     $sql = mysql_query("SELECT id, name, date FROM database"); 
     while($result = mysql_fetch_assoc($sql)) 
     { ?> 
      <tr> 
       <td colspan="6"><?php echo $result['date']; ?></td> 
      </tr> 
      <tr> 
       <td><?php echo $result['id']; echo $result['name']; ?></td> 
      </tr> 
     <?php 
     } ?> 
    </table> 

此打印(例如):

2008-11-23 08:32:32 
id - name 
2008-11-23 11:12:06 
id - name 
2008-11-23 05:42:12 
id - name 
2008-11-23 07:45:23 
id - name 

時,我想

November 23rd, 2008 
id - name 
id - name 

我知道我需要兩個循環,一個循環打印日期,然後另一個打印該日期下的所有數據,然後更改一個值以便顯示該數據t前一天打印的日子等等,但我不確定如何逐漸減少日期。

+0

在同一張表中,你插入了許多具有相同日期的id-name,在sime時刻,是真的嗎? – lindosekai 2013-02-12 22:17:14

+0

有了一點sql聯盟魔法,你可以在一個查詢和一個循環中完成。 – TrippyD 2013-02-12 22:31:44

回答

0

你必須使用GROUP BY子句

GROUP BY DATE_FORMAT(date_col, '%Y-%m-%d') 

,並在for循環添加日期作爲標題,如果當前日期不等於已打印的日期。 (您必須有一個變量來存儲打印日期)

<table class="table"> 
     <?php 
     $sql = mysql_query("SELECT id, name, date FROM database GROUP BY DATE_FORMAT(date, '%Y-%m-%d') order by date ASC"); 
     $PrevDate = false; 
     while($result = mysql_fetch_assoc($sql)) 
     { 
      if($PrevDate!=$result['date']){ 
?> 
      <tr> 
       <td colspan="6"><?php echo $result['date']; ?></td> 
      </tr> 
     <? } ?> 
      <tr> 
       <td><?php echo $result['id']; echo $result['name']; ?></td> 
      </tr> 
     <?php 
     $PrevDate = $result['date']; 
     } ?> 
    </table> 

這應該這樣做。