Php SQL中的条件聚合,在何时使用多个条件
我试图获取特定时间范围内的打印页数(今天打印、本周打印、今年打印、本月打印),并执行以下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
$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)
?