2011-11-11 2 views
0

私はPHP/SQLなどでブログを作成しています。私はSQLの知識があまりにも進んでいると思います。私は、アーカイブのセクションを作成しています。そこでは、ポストが作成されると、ポストの日付/時刻がUNIXのタイムスタンプ形式で保存されます。しかし、私は、アーカイブはこのように表示する:SQLのunixタイムスタンプを制限する

Date  Year Post Count 
-------- ---- ---------- 
November 2011 2 
December 2011 1 

私は簡単にこれを取得することができます:

Date  Year Post Count 
-------- ---- ---------- 
November 2011 2 
November 2011 2 
December 2011 1 

あなたは私が達成しようとしているものを見ることができます願っています。このため私の現在のSQL文は次のとおりです。

SELECT `post_date` FROM `blog_posts` ORDER BY `post_date` DESC 

PHPは、ソートのほとんどを処理し、私はPHPでこれを達成することができます方法があるが、私はSQLで簡単な方法があります確信しています。

誰かが助けてくれることを願っています。

+2

?構文はDBに依存します。 –

答えて

1

MySQL (5.5)のために、それは次のように近くのようになります。

SELECT MONTHNAME(post_date) AS month_col, 
YEAR(post_date) AS year_col, 
COUNT(*) AS num_posts 
FROM blog_posts 
GROUP BY YEAR(post_date), MONTH(post_date) 
ORDER BY year_col, month_col DESC; 

は返します:

使用しているデータベース
December, 2011, 3 
November, 2011, 2 
December, 2010, 1 
+0

おかげで試してみる、これを試してみる! –

+0

あなたの例では、あなたの例ではそれを整理してくれてありがとう 'アーカイブ月、年(FROM_UNIXTIME(' post_date'))を 'archiveYear'、COUNT(*)を' num_posts'としています。 'GROUP BY' archiveMonth' ORDER BY 'archiveMonth' DESC' お手伝いいただいた他の人に感謝します! –

+0

正解または十分に近いと思われる場合は、回答を受け入れてください。 また、上に投稿したクエリ例は、Dec2011とDec2012を同じ12月にグループ化し、COUNTは間違っていることに注意してください。年をグループ化基準として追加する必要があります。 –

0

私はどのSQLを使用しているのか分かりませんが、MySQLの場合は以下のように動作します。

SELECT post_date, COUNT(*) 
FROM blog_posts 
GROUP BY post_date/86400 
ORDER BY post_date DESC 

86400は、24 * 60 * 60の秒数です。

+0

ありがとうございましたページはこれとええ、MySql –

関連する問題