2010-12-20 9 views
0

私はデータベース結果に基づいてウェブサイトの記事の統計を作成するタスクを持っています。私は記事の量を毎月追加して計算し、これらの結果をJavaScriptの統計関数に渡す必要があります。期間内の各月の初日と最終日の検索

私がやっている最初の記事が追加された全期間を見つけることである:

SELECT MIN(date) as startdate FROM articles LIMIT 1 

SELECT MAX(date) as enddate FROM articles LIMIT 1 

今、私は$startDateで始まり、$endDateで終わる期間を持っています。これらの変数は、データベース内のUNIXのタイムスタンプです。データベース内のカラムdateもunixタイムスタンプです。

次に、私が記事の量のようなforeachループ内のクエリ実行の各月に追加されているはずです:

SELECT COUNT(id) as total FROM articles 
    WHERE date > ".$startMonth." AND date < ".$endMonth 

をしかし、私はそれぞれの最初と最後の日を見つける必要があることを確認しますその月の月。そして、私はこの瞬間にくっついた。ですから、これらの最初と最後の日を配列として見つける方法を教えてください。私は、$startDate$endDateに等しくなるまで、whileループでstrtotime("+1 month",$date)のようなものを作るべきだと思う。前もって感謝します。

Upd。データベースには合計46個の記事があります。

SELECT date, COUNT(id) as total FROM `articles` 
    WHERE `author`=$author 
    GROUP BY date_format(date, '%Y-%m') 

結果: 月の記事 11から2010 13 12から2010 33

+0

はまさに、これは使用してください: '(DATE_FORMATを選択日付、 '%Y-%m')、GROUP BY GROUP BYの総数としてのCOUNT(*); – ajreal

+0

これは必要なフォーマットですか? '' SELECT date_format(date、 '%Y-%m') 'を選択すると、選択した列が間違っているので、GROUP BY 1、' – thirtydot

+0

' GROUP BY 1; 'OR 'SELECT date_format(date、'%m-%Y ')、COUNT(*)は記事GROUP BY 1からの総数として、または' – ajreal

答えて

2

同じように、あなたがGROUP BYを使用してこれを達成することができているようです私は月ごとにグループ化された結果である持って喜んで何

SELECT date_format(`date`, '%Y-%m'), COUNT(id) as total 
FROM articles 
GROUP BY date_format(`date`, '%Y-%m'); 

そして、あなたが日付の境界を必要としない...

+1

' GROUP BY 1' – ariefbayu

+0

ありがとうございます。しかし、私はwhileループで結果を取得していて、11月と12月に記事が追加されているにもかかわらず、最初の月としてすべての記事の量を選択します。 – laurencepeter5

+0

@ laurencepeter5 - グループはwhileループをディッチすることです... – ajreal

関連する問題