2017-05-07 158 views
0

我有如下while循環:PHP - While循環,按日期分組?

<table> 
    <thead> 
     <tr> 
      <th>Table</th> 
     </tr> 
    </thead> 

$history = $dbh->prepare("SELECT * FROM softbox_bookings ORDER BY time DESC"); 
$history->execute(); 
while($row = $history->fetch(PDO::FETCH_ASSOC)){ 

    echo '<tbody> 
      <tr> 
       <td>'.$row["date"].'</td> 
       <td>'.$row["name"].'</td> 
      </tr> 
      </tbody>'; 

} 
</table> 

,輸出,非常簡單:

07/05/2017 Name 
07/05/2017 Name 
29/04/2017 Name 

正如你所看到的,上面的輸出有兩個日期是相同的。我的問題是如何將這些日期組合在一起?因此,兩個第一個相同的日期將顯示在一張表中,最後一個日期將顯示在它自己的表中?

像這樣:

table 1: 
07/05/2017 Name 
07/05/2017 Name 

table 2: 
29/04/2017 Name 

這甚至可能,使用while循環?

+0

嗯,我認爲你需要寫一個絮凝物 – RiggsFolly

+0

如何在代碼結果輸出!你可以在頭文件中使用'$ row',但是在你執行查詢並開始返回結果行之前,該變量還沒有被定義。??????? – RiggsFolly

+0

@RiggsFolly啊抱歉。更新我的問題。 – oliverbj

回答

1

在這個例子中一個新的表被打開每次日期變更

$tableOpened = false; 
$lastDate = null; 
$history = $dbh->prepare("SELECT * FROM softbox_bookings ORDER BY time DESC"); 
$history->execute(); 
while($row = $history->fetch(PDO::FETCH_ASSOC)){ 

    if ($lastDate !== $row['date']) { 
     if ($tableOpened) { 
      echo '</tbody></table>';//close previous opened table 
     } 

     //open new table 
     echo '<table> 
    <thead> 
     <tr> 
      <th>Table</th> 
     </tr> 
    </thead><tbody>'; 
     $tableOpened = true; 
    } 

    //table content 
    echo '<tr> 
       <td>'.$row["date"].'</td> 
       <td>'.$row["name"].'</td> 
      </tr> 
      '; 


    $lastDate = $row['date']; 
} 
echo '</tbody></table>'; 
0

試試這個:

<table> 
    <thead> 
     <tr> 
      <th>Table</th> 
     </tr> 
    </thead> 

$history = $dbh->prepare("SELECT DISTINCT(date) FROM softbox_bookings ORDER BY time DESC"); 
$history->execute(); 
while($row = $history->fetch(PDO::FETCH_ASSOC)){ 
    $values = $dbh->prepare("SELECT * FROM softbox_bookings WHERE date=".$row['date']." ORDER BY time DESC")->execute(); 
    echo '<tbody><tr>'; 

    while($values = $history->fetch(PDO::FETCH_ASSOC)){ 
     echo '<td>'.$row["date"].'</td>'; 
     echo '<td>'.$values["name"].'</td>'; 

    } 
    echo '</tr></tbody>'; 

} 
</table>