2011-04-17 92 views
2

我在MYSQL數據庫中有一個日期和約會表。在PHP中分組日期

我想將此內容打印到一個文件中,每個有約會的日期我都希望將它們分組。

<h1>Appontments on 28/01/11<h1> 
<p>10am Visit mum</p> 
<p>12pm eat cake</p> 

我的表的格式是ID(INT),日期(DATE),時間(Time),說明(VARCHAR),地點(VARCHAR)

最新最好的方式爲了解決這個問題,我正在考慮使用一個循環來查找所有日期,然後在該循​​環中找到其他循環來查找每個日期的所有約會。有沒有更高效的方法?

感謝您的時間和原諒我對問題的不好解釋。

回答

3

像這樣的東西大約是最優的,因爲我知道如何做到這一點(假設你已經在內存中的空間,這顯然不應該在這裏的問題):

$query = "SELECT * FROM appointments GROUP BY `date`"; 
// Because of the algorithm used to sort dates below, you don't even really 
// need the GROUP BY. But what the heck, right? 

$result = mysqli_query($mysql, $query); 

$appointments = array(); 

while ($row = mysqli_fetch_assoc($result)) 
{ 
    if (!isset($appointments[$row['date']])) 
    { 
     $appointments[$row['date']] = array(); 
    } 

    $appointments[$row['date']] []= $row; 
} 

foreach ($appointments as $date => $items) 
{ 
    echo "<h1>{$date}</h1>"; 

    echo "<ul>"; 

    foreach ($items as $item) 
    { 
     echo "<li>{$item['Dime']}: {$item['Description']} " . 
      "@ {$item['Place']}</li>"; 
    } 

    echo "</ul>"; 
} 
+0

感謝您的幫助,我想知道第一個while循環的目的是什麼,只是將日期加載到數組中以便在下一節中進行排序? – aaaa 2011-04-17 01:24:28

+0

其實'while'循環是什麼排序和分組;我們基本上是通過一維數據集並添加一個維度(日期),所以當輸出數據時(外部'foreach'循環),它們已經以這樣一種方式分組使用嵌套循環顯示組以及每個組的所有內容非常簡單。 (如果你想看到它的行爲,在外部foreach循環之前添加一個'var_dump($ appointmentments);'以便你可以看到這個數組是如何構造的;它可以幫助你更好地理解這些循環的目的。 – 2011-04-17 01:28:48

+0

再次感謝您的幫助,今天晚上我學會了分配,最後一個問題,我想知道這條線 $ appointmentments [$ row ['date']] [] = $ row,Iv從來沒有看到過此語法並無法找到谷歌上的更多信息。 謝謝! – aaaa 2011-04-17 01:59:03