用thinkphp写一个查询语句使用mysql中的if case 查询统计z_data_days表中datetime字段的年月等于2023-09时Ln_Meet_Standards=1的count值年月等于2023-09时Ln_Meet_Standards=0的count值年月等于2023-09时Ld_Meet_Standards=0的count值年月等于2023-09时Ld
可以使用ThinkPHP的查询语句结合MySQL的IF和CASE语句来实现。以下是一个示例代码:
// 假设数据库表名为z_data_days,datetime字段名为date_time
// 查询2023-09月的统计数据
$resultSeptember = Db::name('z_data_days')
->field([
'COUNT(IF(Ln_Meet_Standards = 1, 1, NULL)) AS count_ln_meet_1',
'COUNT(IF(Ln_Meet_Standards = 0, 1, NULL)) AS count_ln_meet_0',
'COUNT(IF(Ld_Meet_Standards = 1, 1, NULL)) AS count_ld_meet_1',
'COUNT(IF(Ld_Meet_Standards = 0, 1, NULL)) AS count_ld_meet_0',
])
->where('DATE_FORMAT(date_time, "%Y-%m") = "2023-09"')
->find();
// 查询2023-08月的统计数据
$resultAugust = Db::name('z_data_days')
->field([
'COUNT(IF(Ln_Meet_Standards = 1, 1, NULL)) AS count_ln_meet_1',
'COUNT(IF(Ln_Meet_Standards = 0, 1, NULL)) AS count_ln_meet_0',
'COUNT(IF(Ld_Meet_Standards = 1, 1, NULL)) AS count_ld_meet_1',
'COUNT(IF(Ld_Meet_Standards = 0, 1, NULL)) AS count_ld_meet_0',
])
->where('DATE_FORMAT(date_time, "%Y-%m") = "2023-08"')
->find();
// 输出结果
echo "2023-09: \n";
echo "Ln_Meet_Standards=1 count: " . $resultSeptember['count_ln_meet_1'] . "\n";
echo "Ln_Meet_Standards=0 count: " . $resultSeptember['count_ln_meet_0'] . "\n";
echo "Ld_Meet_Standards=1 count: " . $resultSeptember['count_ld_meet_1'] . "\n";
echo "Ld_Meet_Standards=0 count: " . $resultSeptember['count_ld_meet_0'] . "\n";
echo "2023-08: \n";
echo "Ln_Meet_Standards=1 count: " . $resultAugust['count_ln_meet_1'] . "\n";
echo "Ln_Meet_Standards=0 count: " . $resultAugust['count_ln_meet_0'] . "\n";
echo "Ld_Meet_Standards=1 count: " . $resultAugust['count_ld_meet_1'] . "\n";
echo "Ld_Meet_Standards=0 count: " . $resultAugust['count_ld_meet_0'] . "\n";
在上述代码中,使用了Db::name('z_data_days')来指定查询的表名为z_data_days,->field([])指定需要查询的字段。
在COUNT(IF(...))中,使用了IF语句来根据条件判断是否计数,将满足条件的值设为1,不满足条件的值设为NULL,然后再使用COUNT函数进行统计。其中,Ln_Meet_Standards和Ld_Meet_Standards是字段名,count_ln_meet_1、count_ln_meet_0、count_ld_meet_1、count_ld_meet_0是结果集中的字段名,可以根据需要修改。
->where('DATE_FORMAT(date_time, "%Y-%m") = "2023-09"')用于筛选出日期为2023-09的记录,通过DATE_FORMAT函数将datetime字段转换为年月格式进行比较。
最后,通过find()方法执行查询并获取结果集,然后可以根据需要输出结果。
注意:上述代码中的Db是使用ThinkPHP的数据库操作类,需要根据项目中实际的命名空间和引入方式进行修改。
原文地址: https://www.cveoy.top/t/topic/i5Ms 著作权归作者所有。请勿转载和采集!