You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:57:33