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

如何用MySQL与PHP实现员工表按姓名ID合并州字段的报表

解决MySQL员工表State合并问题

最优方案:使用MySQL的GROUP_CONCAT函数

直接在数据库层面完成分组和字符串合并,效率更高且代码更简洁:

SQL查询语句

SELECT Name, ID, GROUP_CONCAT(State SEPARATOR ', ') AS States
FROM employee
WHERE Name IN ('Bob', 'Joe')
GROUP BY Name, ID
ORDER BY Name;

对应PHP代码

// 执行分组查询
$query = "SELECT Name, ID, GROUP_CONCAT(State SEPARATOR ', ') AS States 
          FROM employee 
          WHERE Name IN ('Bob', 'Joe') 
          GROUP BY Name, ID 
          ORDER BY Name";
$result = mysqli_query($dbc, $query);

// 输出表格
echo '<table>
        <tr>
            <th>Name</th>
            <th>ID</th>
            <th>States</th>
        </tr>';

while ($row = mysqli_fetch_assoc($result)) {
    // 使用htmlspecialchars防止XSS注入
    echo '<tr>
            <td>' . htmlspecialchars($row['Name']) . '</td>
            <td>' . htmlspecialchars($row['ID']) . '</td>
            <td>' . htmlspecialchars($row['States']) . '</td>
          </tr>';
}

echo '</table>';

纯PHP处理方案(若需在代码层处理)

如果必须通过PHP逻辑实现分组合并,修正后的代码如下:

// 初始化分组数组,用「姓名-ID」作为唯一键
$employeeGroups = [];

// 查询数据
$result = mysqli_query($dbc, "SELECT * FROM employee WHERE Name IN ('Bob', 'Joe')");
while ($row = mysqli_fetch_assoc($result)) {
    $groupKey = $row['Name'] . '-' . $row['ID'];
    
    // 初始化分组
    if (!isset($employeeGroups[$groupKey])) {
        $employeeGroups[$groupKey] = [
            'Name' => $row['Name'],
            'ID' => $row['ID'],
            'States' => []
        ];
    }
    
    // 将State加入对应分组
    $employeeGroups[$groupKey]['States'][] = $row['State'];
}

// 输出表格
echo '<table>
        <tr>
            <th>Name</th>
            <th>ID</th>
            <th>States</th>
        </tr>';

foreach ($employeeGroups as $emp) {
    $statesStr = implode(', ', $emp['States']);
    echo '<tr>
            <td>' . htmlspecialchars($emp['Name']) . '</td>
            <td>' . htmlspecialchars($emp['ID']) . '</td>
            <td>' . htmlspecialchars($statesStr) . '</td>
          </tr>';
}

echo '</table>';

原代码的问题分析

  1. 变量错误:$row3['state']应为$row['state'],$states1应为$state1,导致State收集失败或错误。
  2. 无分组逻辑:所有State被存入同一个数组,最后仅输出一次,无法对应到每个员工。
  3. 去重逻辑冗余且不可靠:通过<br>和逗号分割再去重的方式容易出现格式错误,且无法保证Name和ID的对应关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:52:42