特定の日付範囲のすべての結果を取得するには、日付でグループ化しないでください。代わりにWHERE句を使用してカウントの日付を制限します。それ以外の場合、クエリは非常に似ています。
$query = mysql_query("SELECT type, count(*) FROM tracking WHERE htcode = '$htG' AND type IN ('viewed', 'shared', 'printed', 'emailed', 'used') AND date >= '$start_date' AND date <= '$end_date' GROUP BY type");
ここではわかりやすくするために、いくつかのラインの上にフォーマットされただけでクエリ自体です:
SELECT type, count(*)
FROM tracking
WHERE htcode = '$htG'
AND type IN ('viewed', 'shared', 'printed', 'emailed', 'used')
AND date >= '$start_date' AND date <= '$end_date'
GROUP BY type
ちょうどあなたが$start_date
と$end_date
最初の値を設定してください。例えば、今日のためにちょうどこれにそれらの両方を設定したい:date('Y-m-d')
はYYYY-MM-DD
のような形式で、ちょうど今日の日付であることを
$start_date = date('Y-m-d');
$end_date = date('Y-m-d');
注意を。
昨日のために、あなたはdate()関数に昨日のタイムスタンプを渡しますが、同じフォーマットを使用したい:
$start_date = date('Y-m-d', strtotime('yesterday'));
$end_date = date('Y-m-d', strtotime('yesterday'));
を、過去30日間、あなたは今日30日前に開始および終了したいです:
$start_date = date('Y-m-d', strtotime('30 days ago'));
$end_date = date('Y-m-d');
開始日/終了日はこのようにすることができます。私はstrtotime()を使用していますので、多くの英語のフレーズを使って日付の算術演算を行う必要がなく、タイムスタンプを指定できます。また
、あなたが複数回クエリを実行されるので、それはおそらく、独自の関数にロジックを分離するために理にかなって:(最後の30日間で
function report_range($htG, $start_date, $end_date) {
$query = mysql_query("SELECT type, count(*) FROM tracking WHERE htcode = '$htG' AND type IN ('viewed', 'shared', 'printed', 'emailed', 'used') AND date >= '$start_date' AND date <= '$end_date' GROUP BY type");
while ($result = mysql_fetch_assoc($query)){
echo $start_date . '-' . $end_date . '/' . $result['type'] . ' = ' . $result['count(*)'];
echo '<br>';
}
}
その後
このような何かでそれを実行しますこの例):
report_range($htG, date('Y-m-d', strtotime('30 days ago')), date('Y-m-d'));
私は4つの異なる結果を表示します。今日、昨日、先月、そして昨年。だから私は、PHPを使用して日付を並べ替えると思ったのです。何をお勧めしますか? –
代わりに、読みやすくするために 'WHERE date BETWEEN '$ start_date' AND '$ end_date''を使用することもできます。 –
@DanielHunter、今日、昨日、そして過去30日間のやり方を示す例を追加しました。今年は365日という意味ですか?もしそうなら、365と同じフォーマットを使用することができます。 –