如何简化MySQL查询?现有PHP查询代码求精简方案
简化冗余MySQL查询的方案
嘿,我来帮你搞定这段重复啰嗦的查询代码!你现在的写法是多次执行几乎一模一样的SQL查询,只是department参数不同,这不仅代码冗余,还会增加数据库的访问次数,拖慢程序性能。咱们可以用一次查询就搞定所有统计需求,一起来看看优化后的写法:
基于原有mysql扩展的简化写法
注意:
mysql_*系列函数已经被PHP官方废弃,存在安全风险,建议尽快迁移到mysqli或PDO扩展,这里先基于你的原有代码做兼容简化:
<?php // 一次查询获取所有目标部门的当日数据统计 $sel = mysql_query("SELECT department, COUNT(form) AS count FROM webcm WHERE department IN ('PDN-ML', 'PDN-HM') AND DATE = CURDATE() GROUP BY department"); // 初始化统计变量,避免未查询到数据时出现未定义问题 $PDNML1 = 0; $PDNHM1 = 0; // 遍历查询结果,将统计值分配到对应变量 while ($row = mysql_fetch_array($sel)) { match ($row['department']) { 'PDN-ML' => $PDNML1 = $row['count'], 'PDN-HM' => $PDNHM1 = $row['count'], }; } ?>
推荐的现代化写法(使用mysqli扩展)
为了代码的安全性和可维护性,更推荐使用mysqli扩展来操作数据库,示例如下:
<?php // 建立数据库连接(替换为你的实际数据库信息) $conn = new mysqli('localhost', '你的用户名', '你的密码', '你的数据库名'); // 检查连接是否成功 if ($conn->connect_error) { die("数据库连接失败: " . $conn->connect_error); } // 一次查询多个部门的当日统计 $sql = "SELECT department, COUNT(form) AS count FROM webcm WHERE department IN ('PDN-ML', 'PDN-HM') AND DATE = CURDATE() GROUP BY department"; $result = $conn->query($sql); // 初始化统计变量 $PDNML1 = 0; $PDNHM1 = 0; // 处理查询结果 if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { if ($row['department'] === 'PDN-ML') { $PDNML1 = $row['count']; } elseif ($row['department'] === 'PDN-HM') { $PDNHM1 = $row['count']; } } } // 关闭数据库连接 $conn->close(); ?>
优化思路说明
- 使用
IN条件一次性指定所有需要统计的部门,避免重复编写WHERE department = 'xxx' - 用
GROUP BY department对结果按部门分组,一次性得到所有部门的统计值 - 通过遍历结果集,将统计值分配到对应的变量中,避免多次执行数据库查询
这样修改后,代码不仅更简洁易维护,还减少了数据库的交互次数,提升了程序运行效率。如果之后需要新增其他部门的统计,只需要修改IN里的部门列表和变量赋值逻辑即可。
内容的提问来源于stack exchange,提问作者I'mAGurl
相关产品推荐
相关产品推荐

