2009-09-08 70 views
1

我有一個mysql數據庫的日期條目。所以我想要的是顯示我的數據庫中的所有日期,然後在每個日期下,我想顯示在specefic日期輸入的數據庫中的所有條目。我正在考慮兩個循環,但我不知道如何編寫條件來顯示數據庫中的所有日期,然後循環輸出該日期下的條目。循環mysql數據

編輯:我用NOW()來存儲日期。通過longneck使用循環,如何在檢查日期是否與之前相同時忽略時間?我應該爆炸嗎?最好的方法是什麼?

回答

4

你應該使用一個查詢,按日期排序,並檢測的日期變化的信號,顯示下一個日期:

<?php 

$sql = 'select start_date, name from events order by start_date'; 

$res = mysql_query($sql) or die(mysql_error()); 

$prev_date = null; 

while ($row = mysql_fetch_assoc($res)) { 
    if ($row['start_date'] != $prev_date) { 
    echo "<h1>{$row['start_date']}</h1>"\n; 
    $prev_date = $row['start_Date']; 
    } 

    echo "<p>{$row['name']}</p>"; 
} 

?> 
+0

+1這也是我經常這樣做的。順便說一下,PHP數組鍵是區分大小寫的,但在上面的一種情況下使用'start_Date'。 – 2009-09-08 19:03:12

+0

「start_date,name」中的名稱是什麼? – Strawberry 2009-09-08 21:31:50

+0

等一下,這個電流只顯示日期爲h1,然後在該日期下只顯示1個條目。我希望它顯示該日期的所有條目。 E.g. 2007年1月6日 條目1,條目2,條目3 – Strawberry 2009-09-08 21:39:49

1

我假設你想要一個日期列表,以便你可以對每個日期的條目做單獨的查詢。通常你會使用類似的查詢:

SELECT DISTINCT date_field FROM table_name ORDER BY date_field DESC 

(這將做到這最新一,刪除DESC使其先進先出)

現在,你可能不希望做這樣,因爲它需要大量的查詢(每天輸入一個)。按日期排序條目會更高效,然後使用PHP中的邏輯打印出標題。所以,你可以使用如下代碼:

$result = $db->query("SELECT * FROM table_name ORDER BY date_field DESC"); 
$current_date = ""; 
while ($row = $result->fetch_array()) { 
    if ($current_date != $row["date_field"]) { 
     echo "<h3>{$row['date_field']}</h3>"; 
     $current_date = $row["date_field"]; 
    } 
    // Print your entry from $row here. 
} 
0

你可能會想,在你的SQL語句:(假設它爲datetime型)

SELECT * FROM表WHERE 日之間的「2009- 9-8 00:00:00' 與 '2008-9-8 23:59:59 '

然後通過你們的結果做你的正常循環

+0

對不起,我起初誤解了這個問題。你可以循環遍歷所有日期,並使用jamuraa中的DISTINCT方法列出它們,然後在列出它們的循環中有這一次運行。 – kilrizzy 2009-09-08 18:56:12

0

也有看SELECT語句的GROUPBY條款。