我的桌子
CREATE TABLE `data` (
`record_id` int(20) NOT NULL auto_increment,
`id_fk` int(20) NOT NULL,
`plant_id_fk` int(20) NOT NULL,
`date` date NOT NULL,
`jsdate` varchar(20) character set latin1 collate latin1_general_ci NOT NULL,
`value_1` varchar(20) collate utf8_bin default NULL,
`category_1` varchar(200) character set latin1 collate latin1_general_ci default NULL,
PRIMARY KEY (`record_id`),
KEY `id_fk` (`id_fk`),
KEY `plant_id_fk` (`plant_id_fk`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
看起来像这样
29 1 50 2010-05-20 2010, 4, 20 10 expenses
23 1 52 2010-12-13 2010, 11, 13 10 expenses
22 1 50 2011-01-10 2011, 0, 10 10 expenses
21 1 51 2011-02-07 2011, 1, 07 10 expenses
14 1 50 2011-03-31 2011, 2, 31 12 exercise
20 1 50 2011-04-01 2011, 3, 01 10 expenses
我正在使用此 SQL 代码运行查询
select up.id_fk, p.plant_name, up.plant_id_fk, ym2, ifnull(sum(data.value_1),0) totalvalue_1
from (select distinct date_format(date, '%Y-%m') ym, date_format(date, '%b %Y') ym2 from data where data.id_fk=1
cross join (select distinct data.id_fk, data.plant_id_fk from data where data.id_fk=1) up
inner join plants p on p.plant_id = up.plant_id_fk
left join data on date_format(data.date, '%Y-%m') = dates.ym
and up.id_fk=data.id_fk
and up.plant_id_fk=data.plant_id_fk
and category_1='expenses'
group by up.id_fk, up.plant_id_fk, ym2, ym
order by up.id_fk, up.plant_id_fk, date(concat(ym,'-1'))
我希望能够使用用户传递的日期范围过滤结果,例如
$dc = date("Y-m-d", strtotime("now"));
$df = date("Y-m-d", strtotime((date('Y')) . "-01-01"));
在 mySQL 中使用类似的东西
WHERE data.date BETWEEN $dc AND $df
但是在上面的查询中没有找到在哪里插入这个子句。
有什么建议可以完成这项工作吗?任何指针都非常感谢。谢谢!