首页 > 解决方案 > 如何在codeigniter中使用mysql substring_index计算JSON格式数据的总和

问题描述

我有 3 行每个员工 4 月、5 月、6 月的月薪明细。Payslip_earnings 列以 JSON 格式保存详细信息,例如

{"basicpay":40000,"hra":16000,..etc }

我可以在使用 phpmyadmin 单独执行查询时获取 json 数据变量的总和

sum(substring_index ( substring_index (payslip_earnings,'{"basicpay":',-1),'," ',1) ) as basic.

在codeiginter模型页面中选择基本内部时面临空白页面错误/语法错误

$query = $this->db->query("SELECT payslip.payslip_empcode, 
         sum(substring_index ( substring_index (payslip_earnings,'{"basicpay":',-1),'," ',1) ) as basic
         FROM payslip LEFT OUTER JOIN employee_official_master ON
         payslip.payslip_empcode=employee_official_master.employee_code 
         WHERE payslip.payslip_fyear = '2018' and  
         payslip.payslip_empcode IN ('MAR015','MAR010') AND 
         ( payslip_month = 'April' OR payslip_month = 'May' OR payslip_month = 'June') 
GROUP BY payslip.payslip_empcode "
           );

如何在 codeigniter 模型页面中实现相同的功能?

标签: phpmysqlcodeigniterphpmyadmin

解决方案


Try this One..
$colname  = '{"basicpay":' ;            
         $seperator = ',';  
         $query = $this->db->query("SELECT payslip.payslip_empcode, 
         sum(substring_index (substring_index (payslip.payslip_earnings,'".$colname."',-1),'".$seperator."',1) ) as basicpay
         FROM payslip LEFT OUTER JOIN employee_official_master ON
         payslip.payslip_empcode=employee_official_master.employee_code 
         WHERE payslip.payslip_fyear = '2018' and  
         payslip.payslip_empcode IN ('MAR015','MAR010') AND 
         ( payslip_month = 'April' OR payslip_month = 'May' OR payslip_month = 'June') 
GROUP BY payslip.payslip_empcode "
           );

推荐阅读