我试图获取特定时间范围内的打印页数(今天打印、本周打印、今年打印、本月打印)并执行以下 SQL 查询:
$select2 = "SELECT
IF( station_name = '', 'Unknown', station_name ) station_name,
station_name as db_name,
sum(case when year(print_date) = $year then print_pages end) as yearpages,
sum(case when (month(print_date) = $month and year(print_date) = $year) then print_pages end) as monthpages,
sum(case when (day(print_date) = $day and year(print_date) = $year and month(print_date) = $month) then print_pages end) as daypages,
sum(case when (week(print_date) = $week AND year(print_date) = $year AND month(print_date) = $month) then print_pages end) as weekpages
FROM `file_prints`
GROUP BY station_name;";
但是,当我对在 Zend PHP 框架内执行查询而输出的数组中的一个元素进行 var 转储时,我发现年页和月页是明确定义的(除 NULL 之外的值是返回),但周页和日页均为 NULL,如下所示:
$rows = $_userTable->getAdapter()->fetchAll($select2);
var_dump($rows[46]);
print_r(array_keys($rows[46]));
array(6) {
["station_name"]=> string(15) "uchicagoLIBRARY"
["db_name"]=> string(15) "uchicagoLIBRARY"
["yearpages"]=> string(5) "33391"
["monthpages"]=> string(4) "2498"
["daypages"]=> NULL
["weekpages"]=> NULL }
Array (
[0] => station_name
[1] => db_name
[2] => yearpages
[3] => monthpages
[4] => daypages
[5] => weekpages
查询未处理日页和周页但月页和年页正常的原因可能是什么?
最佳答案
当您使用 case 语句时,您应该按照这样的顺序保留日、周、月、年,以获得天和周。
$select2 = "SELECT IF( station_name = '', 'Unknown', station_name )
station_name, station_name as db_name, sum(case when
(day(print_date) = $day and year(print_date) = $year and
month(print_date) = $month) then print_pages end) as daypages, sum(case
when (week(print_date) = $week AND year(print_date) = $year AND
month(print_date) = $month) then print_pages end) as weekpages,
sum(case when (month(print_date) = $month and year(print_date) = $year)
then print_pages end) as monthpages,sum(case when year(print_date) =
$year then print_pages end) as yearpages
FROM `file_prints`
GROUP BY station_name;";
关于php - SQL 中的条件聚合,其中 WHEN 具有多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30115451/