php - SQL 中的条件聚合,其中 WHEN 具有多个条件

标签 php mysql

我试图获取特定时间范围内的打印页数(今天打印、本周打印、今年打印、本月打印)并执行以下 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/

相关文章:

mysql - 如何在 MySQL 查询中使用 BETWEEN 的对立面?

php - Piwik 将 View 移动到另一个站点 ID

php - MySQL在公共(public)查询中分离两个表

PHP判断当前时间是否大于11 :00

php - 如何在 PHPStorm 中删除这些水平线?

php - 由于数据库更新而等待事件

MYSQL - 表显示选项(不打印重复项)

mysql - 连接多个表时出现 "WHERE"问题

MySQL 错误 1093 - 无法在 FROM 子句中指定要更新的目标表

php - 如何通过用 PHP 编程将新列表添加到我的 MailChimp 帐户?