Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL中的条件聚合,在何时使用多个条件_Php_Mysql - Fatal编程技术网

Php SQL中的条件聚合,在何时使用多个条件

Php SQL中的条件聚合,在何时使用多个条件,php,mysql,Php,Mysql,我试图获取特定时间范围内的打印页数(今天打印、本周打印、今年打印、本月打印),并执行以下SQL查询: $select2 = "SELECT IF( station_name = '', 'Unknown', station_name ) station_name, station_name as db_name, sum(case when year(print_date) = $ye

我试图获取特定时间范围内的打印页数(今天打印、本周打印、今年打印、本月打印),并执行以下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 framework中执行查询后输出的数组中的一个元素上执行var转储时,我发现yearpages和monthpages是定义良好的(返回的值不是NULL),但是weekpages和daypages都是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 

查询没有处理daypages和weekpages,但monthpages和yearpages没有问题的原因是什么?

在使用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;";

首先,我希望您在执行查询之前转义了变量,因为您当前的实现可能面临sql注入攻击的风险

由于各种原因,这些值可能为空:


你能告诉我更多关于变量的值吗?您的
$day
$week
变量可能不是数值。或者您的表中没有
print_date
值等于
$day
$week

的行,我之前已将它们回显出来,可以确认$day和$week都是数字。我还在phpmyadmin中手动检查了最后一段的后半部分,但该参数不成立。对不起,请仔细检查:您发现的打印日期值等于
$day
,这些行是否也满足:
day(打印日期)=$day和year(打印日期)=$year和year(打印日期)=$year和month(打印日期)=$month)