CodeIgniter项目中按课程代码和区域中心统计近3年收入的SQL查询
CodeIgniter 统计指定课程与区域中心近3年总收入的查询实现
方式一:使用CodeIgniter Query Builder(推荐)
Query Builder会自动处理SQL注入风险,语法更贴合框架规范:
// 获取用户提交的筛选参数 $courseCode = $this->input->post('course_code'); $regionalCenter = $this->input->post('regional_center'); // 构建查询 $this->db->select('SUM(`Sum of income`) AS total_income', FALSE); $this->db->from('budget'); $this->db->where('course_code', $courseCode); $this->db->where('regional_center', $regionalCenter); // 筛选近3年数据,替换`record_date`为表中实际存储日期的字段名 $this->db->where('record_date >= DATE_SUB(NOW(), INTERVAL 3 YEAR)'); // 执行查询并获取结果 $query = $this->db->get(); $result = $query->row(); $totalIncome = $result->total_income ?? 0;
方式二:原生SQL查询
适合需要自定义复杂逻辑的场景,注意使用查询绑定避免注入:
$courseCode = $this->input->post('course_code'); $regionalCenter = $this->input->post('regional_center'); // 原生SQL语句 $sql = "SELECT SUM(`Sum of income`) AS total_income FROM budget WHERE course_code = ? AND regional_center = ? AND record_date >= DATE_SUB(NOW(), INTERVAL 3 YEAR)"; // 执行查询,参数绑定 $query = $this->db->query($sql, [$courseCode, $regionalCenter]); $result = $query->row(); $totalIncome = $result->total_income ?? 0;
关键注意事项
- 替换
record_date为你表中实际存储日期/年份的字段;如果是单独的年份字段,可改为year >= YEAR(NOW()) - 3 - 列名
Sum of income包含空格,MySQL中需用反引号包裹,SQL Server则用方括号[]` - 始终使用参数绑定或Query Builder处理用户输入,防止SQL注入
内容的提问来源于stack exchange,提问作者Mathee
相关产品推荐
相关产品推荐

