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

维修工单表格排序与过滤功能异常排查求助

问题修复方案

1. 排序功能异常(ID排序混乱)

原因

SQL查询中ORDER BY子句写死了按work_orders.status排序,完全未使用前端传入的$sort参数,导致无论点击哪个表头,结果都只按工单状态排序;状态相同的记录无固定排序规则,因此出现ID 21排在20之前的混乱情况。

修复代码

修改Repairtable.php中的$query变量,替换ORDER BY部分以使用传入的$sort和$order参数:

// 先对排序字段做安全映射,避免非法字段导致SQL错误
$allowed_sort_fields = [
    'id' => 'work_orders.id',
    'device_name' => 'devices.type',
    'name' => 'customers.name',
    'service_request_id' => 'devices.service_request_id',
    'status' => 'work_orders.status'
];
$sort_column = isset($allowed_sort_fields[$sort]) ? $allowed_sort_fields[$sort] : 'work_orders.id';

// 重构查询语句
$query = "SELECT work_orders.id, devices.type AS device_name, customers.name, work_orders.status, devices.service_request_id, devices.issues
          FROM work_orders
          INNER JOIN devices ON work_orders.device_id = devices.id
          INNER JOIN customers ON devices.customer_id = customers.id
          $where
          ORDER BY $sort_column $order
          LIMIT 10 OFFSET 0";

2. 状态下拉框无法过滤数据

原因

SQL WHERE子句中OR与AND的优先级冲突:AND优先级高于OR,原条件会被解析为:

WHERE (customers.name LIKE '%%' OR devices.type LIKE '%%') OR (devices.issues LIKE '%%' AND work_orders.status='Awaiting Repair')

这意味着只要前两个搜索条件满足(空搜索时匹配所有记录),无论status值是什么都会被查询出来,导致过滤失效。

修复代码

将所有OR连接的搜索条件用括号包裹,确保status的AND条件作用于整个搜索逻辑:

// 原代码
$where = "WHERE customers.name LIKE '%$search%' OR devices.type LIKE '%$search%' OR devices.issues LIKE '%$search%'";

// 修改后
$where = "WHERE (customers.name LIKE '%$search%' OR devices.type LIKE '%$search%' OR devices.issues LIKE '%$search%')";

修改后,添加status条件的WHERE子句会正确解析为:

WHERE (customers.name LIKE '%%' OR devices.type LIKE '%%' OR devices.issues LIKE '%%') AND work_orders.status='Awaiting Repair'

额外小问题修复

Repairtable.php中的错误输出使用了未定义的$conn变量,需改为$db:

// 原代码
if ($db->error) {
  die("Query failed: " . $conn->error);
}

// 修改后
if ($db->error) {
  die("Query failed: " . $db->error);
}

内容的提问来源于stack exchange,提问作者Jaiden Watling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:15:31