2009-10-25 72 views
0

我正在構建一個迷你新聞CMS,其中添加的新聞使用DATE類型列進行排序,例如, INSERT date_posted=NOW()每月類別與MySQL日期類型

我可以很容易地列出所有可用的月份:SELECT DATE_FORMAT(date_posted, '%M %Y') as date_posted。這使得每月類別列表。

我遇到的問題是顯示特定月份的所有消息。我試圖在URL中傳遞date_posted變量,但未能真正將它合併到我的查詢中。例如,如果我嘗試WHERE date_posted=\"2009-10-16\",結果是當天的所有消息。另一方面,WHERE date_posted=\"2009-10\"不起作用。

例如,我在URL DATE_FORMAT(date_posted, '%M%Y') as month中通過了這個參數,例如在2009年10月回聲。然後,WHERE date_posted = $ month不會返回任何結果,因爲首先我猜測它的格式是錯誤的,其次,MySQL數據類型不會輸出我想要的內容,如前面提到的硬編碼示例所證明的那樣。

請幫忙, 謝謝!

回答

3

您應該使用範圍在where條款:

where date_posted >= cast('2009-10-01' as date) 
    and date_posted < cast('2009-11-01' as date) 

獲得 「2009-10-01」 和 「2009-11-01」 的日期,你可以使用PHP的strtotimedate功能:

$date_from_querystring = "2009-10"; 
$start_date = $date_from_querystring . "-01"; 
$end_date = date("Y-m-d", strtotime($start_date . " +1 month")); 

您也可以使用yearmonth功能,但你不會得到來自您可能能夠使用任何索引任何好處,因此它通常不是一個好的解決方案的範圍。舉個例子:

where year(date_posted) = 2009 and month(date_posted) = 10 
+0

這很棒,但我迷失在實際的「類別」部分。例如,如何像2009年10月那樣,在隨後的每個月中如何動態更改這兩個月,顯然,2010年1月它將如何變化? 謝謝。 – MrSplashyPants 2009-10-25 00:23:56

+0

我認爲年和月的工作。只要$ month = october2009字符串將不得不被解剖,以便能夠在所使用的函數是......的情況下這樣做。 :D – MrSplashyPants 2009-10-25 00:29:56

+0

太棒了!所以它出現了('Y-m',strtotime($ month)); 非常感謝您的熱心幫助,先生!過去7個小時,我一直試圖自己做這件事,但最後放棄了,並在這裏問道。非常感謝您的幫助! :) – MrSplashyPants 2009-10-25 00:56:50