2014-01-07 24 views
1

我正在創建一個博客,並且希望能夠根據帖子添加的日期來過濾結果。帖子的格式爲2013-11-15 04:08:03。現在我想點擊一個月的列表,所以假設我點擊11月應該顯示11月份的所有帖子,但我不確定如何從上述時間提取月份,然後將其添加到查詢中。使用Y/m/d按月組織帖子列表

我到目前爲止所走的是一個月的列表。你選擇一個月的月份的數值,即1月= 01。現在,所有的作品,我可以回聲說,它在網頁上工作,但我怎麼鏈接與Y /米/ d以便01選擇01月份的所有條目?

我在想,它會像所有選擇m =所選月份(m是y/m/d中的m)。當你取今年月

SELECT 
    DATE_FORMAT(`date_field`, '%Y%m') AS `id`, 
    DATE_FORMAT(`date_field`, '%M %Y') AS `title` 
FROM 
    `posts_table` 
GROUP BY 
    DATE_FORMAT(`date_field`, '%Y%m') 
ORDER BY 
    `date_field` DESC 

,創建鏈接與id從以前的查詢獲取,如:

+0

使用時間爲時間戳! –

+0

@MaciejCzyżewski:他爲什麼要使用時間戳?有什麼不同? –

+0

@Glavić它不是很大。但我認爲更好的解決方案是使用'timestamp',因爲它更通用。他只需要將他的'Y/m/d'轉換爲'timestamp',並用'> ='執行。 –

回答

1

要得到所有月份中,你有你的帖子,你可以運行這個簡單的查詢

echo '<a href="....?month=' . $row['id'] . '">' . $row['title'] . '</a>'; 
# <a href="....?month=201311">November 2013</a> 

當用戶到達這個鏈接,獲取GET參數,並選擇所有帖子本月:

SELECT * 
FROM `posts_table` 
WHERE DATE_FORMAT(`date_field`, '%Y%m') = ? 

其中?應選月份,如201311。但是,如果你有一些date_field指數,那麼你應該使用BETWEEN因此指數將應用於:

$selected = '201311'; 
$from = new DateTime("{$selected}01"); 

$sql = " 
    SELECT * 
    FROM `posts_table` 
    WHERE `date_field` BETWEEN ? AND ? 
"; 
// first ? should be $from->format('Y-m-d 00:00:00'); 
// second ? should be $from->format('Y-m-t 23:59:59'); 
+0

謝謝你,這將提出一個錯誤'''帖子'GROUP BY DATE_FORMAT('datetime','%Y%m')ORDER BY'datetime'DESC'at line 1'我看不到哪裏出錯了繼承人SQL SELECT'DATE_FORMAT''datetime','%Y%m')AS'id',DATE_FORMAT('datetime','%M%Y')AS'title'FROM'Posts'GROUP BY DATE_FORMAT('datetime',' %Y%m')ORDER BY'datetime'DESC 它說有一個額外的'之前的職位,但沒有:S – jphillip724

+0

@ jphillip724:你不能使用單引號(')爲別名,表和字段名稱。你應該使用back-tick('),就像我在答案中所做的那樣。如果您仍然遇到問題,請將您的查詢複製粘貼到http://pastebin.com/以獲取更佳視圖。 –

+1

感謝抱歉,遲到的回覆,現在的工作:)所以分配! – jphillip724