致命错误:第305行的C:\xampp\htdocs\dd\system\database\drivers\mysqli\mysqli\u driver.php中超过了30秒的最大执行时间

致命错误:第305行的C:\xampp\htdocs\dd\system\database\drivers\mysqli\mysqli\u driver.php中超过了30秒的最大执行时间,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有这个代码来获取每个患者的HMO和PHIC数量。我的问题是,每当我尝试获取50多个患者记录时,它总是显示一个致命错误。有人能帮我吗。谢谢大家! $this->db->select("pxtype,(casecode) as casecodex,patientname,concat(dischadate,' ',dischatime) as discha , (select sum(totalamt) FROM ". inpatient_ipd_vw ." whe

我有这个代码来获取每个患者的HMO和PHIC数量。我的问题是,每当我尝试获取50多个患者记录时,它总是显示一个致命错误。有人能帮我吗。谢谢大家!

$this->db->select("pxtype,(casecode) as casecodex,patientname,concat(dischadate,' ',dischatime) as discha , 

        (select sum(totalamt) FROM ". inpatient_ipd_vw ." where hospcode NOT LIKE 'MI%' and hospcode NOT LIKE 'PD%' and hospcode NOT LIKE 'PF%' and casecode = casecodex) as ACTUALHOSP,
        (select sum(totalamt) FROM ". inpatient_ipd_vw ." where hospcode LIKE 'PDPP%' and casecode = casecodex ) as PHICHOSP,
        (select sum(totalamt) FROM ". inpatient_ipd_vw ." where hospcode LIKE 'MI%' and hospcode NOT LIKE 'MIMD%' and casecode = casecodex) as HMOHOSP,
        (select sum(totalamt) FROM ". inpatient_ipd_vw ." where hospcode LIKE 'PFMD%' and casecode = casecodex) as ACTUALPF,
        (select sum(totalamt) FROM ". inpatient_ipd_vw ." where hospcode LIKE 'PD%' and hospcode NOT LIKE 'PDPP%' and casecode = casecodex) as PHICPF,
        (select sum(totalamt) FROM ". inpatient_ipd_vw ." where hospcode LIKE 'MIMD%' and casecode = casecodex) as HMOPF")
            ->from(inpatient_ipd_vw)
            ->where('dischadate >= "'.$first.'"')
            ->where('dischadate <= "'.$end.'"')
             ->where("hospcode LIKE 'MI%'");

             if($hmocode !== NULL && $hmocode !== "All" )
             {
                 $this->db->where('hmocode',$hmocode);
             }
             $this->db->group_by('casecode' );

您可能应该有一个单独的关系表,名为say,codes,其中您将相关项的id存储在表injective_ipd_vw中,并存储主代码,例如PFMD,以及您需要的特定代码hospcode PFMD{whatever}。然后,您可以使用Inspitality_ipd_w表和codes表进行连接,并使用常规Where,这将大大加快速度

或者更简单:

您可以在表Inspitality_ipd_w中添加一列,名为master_code,其中仅存储代码hospcode的起始值,例如PFMD。您仍然可以保留特定的代码字段hospcode。然后,您可以使用where on master_代码进行查询;这也将大大加快速度,通过一个简单的脚本,您可以很容易地填充此列


最重要的是,您可以使用CodeIgniter的查询缓存来加速一切。只要确保无论何时修改、添加或删除项目,都需要删除附带的缓存文件,否则更改不会反映出来。查询缓存通常会使页面加载速度与静态页面加载速度一样快,但是如果使用,您必须知道自己在做什么。

您的查询执行时间太长;可能是因为所有的相似和不相似的陈述。你应该优化你的查询,或者接受它需要很长时间,你必须增加最大执行时间。有什么方法可以优化我的查询吗?非常感谢。你的表索引是什么?您的整个数据库结构可能会得到改进,因为我们没有足够的信息来说明它们可能是怎样的,但归根结底,这听起来像是一个数据库模式问题,源于不正确的开发,不知道选择它是什么或为什么,而我们几乎不可能说出来。例如,为什么您需要像PFMD%这样的语句?您不能只执行where PFMD吗?或者它不总是像那样输入数据库吗?因为如果不是,它应该是。标准化输入允许您正确地查询数据库,而无需查询。likes应该只在必要时使用,例如搜索客户名称。嗨!我需要使用like,因为PFMD后面还有其他字母。所以我需要搜索所有以PFMD开头的内容。我会试试这个。谢谢@Alex:从中选择sumtotalamt。住院患者(ipd)(vw)。其中Start2'MI'和Start2'PD'以及Start2'PF'和casecode=casecodex作为实际值,现在我有了这个,但仍然需要30多秒才能加载:有什么改进吗?也许可以尝试执行get_compiled_select来获取完整语句,然后在phpmyadmin上运行它,看看它是否更快。尽量排除一切可能。你有10个不同的绝对没有帮助的地方,还有一组人和5个不同的总数。。。这就像一个问题中的三位一体的缓慢。您可能必须执行某种存储过程或缓存。