Чтобы получить все результаты для определенного диапазона дат, не группируйте по дате;вместо этого используйте предложение 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
первый.Например, на сегодняшний день вы просто установите их обоих на это:
$start_date = date('Y-m-d');
$end_date = date('Y-m-d');
Обратите внимание, что date('Y-m-d')
- это просто сегодняшняя дата в формате, подобном YYYY-MM-DD
.
Для вчерашнего дня,вы бы передали вчерашнюю временную метку в функцию date () , но использовали бы тот же формат:
$start_date = date('Y-m-d', strtotime('yesterday'));
$end_date = date('Y-m-d', strtotime('yesterday'));
А в течение последних тридцати дней вы начинали 30 дней назад иконец сегодня:
$start_date = date('Y-m-d', strtotime('30 days ago'));
$end_date = date('Y-m-d');
Вы можете сделать это так для любой даты начала / окончания.Обратите внимание, что я использую strtotime () , что позволяет вам использовать множество английских фраз для указания меток времени вместо необходимости выполнять арифметику дат.
Кроме того, поскольку вы будете выполнятьВыполнять запросы несколько раз, возможно, имеет смысл разделить логику на ее собственную функцию:
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>';
}
}
Затем запустите ее с чем-то вроде этого (последние 30 дней в этом примере):
report_range($htG, date('Y-m-d', strtotime('30 days ago')), date('Y-m-d'));