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

基于现有MySQL查询结果,用PHP构建表格并按列分组

实现PHP分组表格展示方案

既然你没法调整现有的SQL语句,那咱们就把分组逻辑放到PHP层面来处理——刚好你的SQL已经按rcabbr升序排序了,这为我们在PHP里分组展示提供了天然便利。

步骤1:安全获取数据库查询结果

首先确保你正确执行SQL并拿到结果集,这里用mysqli举个实际例子(用PDO的话逻辑完全通用):

// 假设你已经建立了合法的数据库连接$conn
// 先做SQL注入防护:转义输入参数
$safe_agcid = mysqli_real_escape_string($conn, $agcid);

$sql = "SELECT a.name AS agcname, m.npa, m.nxx, COUNT( m.npa ) AS ooscount,e.rcabbr,s.l_state FROM MTAs m INNER JOIN AGCs a ON a.id = m.agcid LEFT JOIN endoffice.endoff e ON e.npa = m.npa INNER JOIN endoffice.state s ON s.s_state = e.state AND e.nxx = m.nxx WHERE agcid = '" . $safe_agcid . "' GROUP BY npa, nxx ORDER BY rcabbr ASC";
$result = mysqli_query($conn, $sql);

// 把结果转成数组方便后续遍历处理
$data_rows = [];
while ($row = mysqli_fetch_assoc($result)) {
    $data_rows[] = $row;
}

步骤2:PHP层面按rcabbr分组生成表格

接下来我们遍历结果集,根据rcabbr的变化自动生成分组标题,同时输出结构化表格:

if (!empty($data_rows)) {
    echo '<table border="1" cellpadding="8" cellspacing="0" style="width: 100%; border-collapse: collapse;">';
    // 输出表头
    echo '<thead><tr style="background-color: #e8e8e8;">';
    echo '<th>AGC名称</th><th>NPA</th><th>NXX</th><th>统计数量</th><th>所属州</th>';
    echo '</tr></thead>';

    $current_group = null;
    foreach ($data_rows as $row) {
        // 当分组标识rcabbr变化时,输出分组标题行
        if ($row['rcabbr'] !== $current_group) {
            $current_group = $row['rcabbr'];
            echo '<tbody><tr style="background-color: #f5f5f5; font-weight: 600;">';
            echo '<td colspan="5">分组:' . htmlspecialchars($current_group) . '</td>';
            echo '</tr>';
        }
        // 输出当前数据行
        echo '<tr>';
        echo '<td>' . htmlspecialchars($row['agcname']) . '</td>';
        echo '<td>' . htmlspecialchars($row['npa']) . '</td>';
        echo '<td>' . htmlspecialchars($row['nxx']) . '</td>';
        echo '<td>' . htmlspecialchars($row['ooscount']) . '</td>';
        echo '<td>' . htmlspecialchars($row['l_state']) . '</td>';
        echo '</tr>';
    }
    echo '</tbody></table>';
} else {
    echo '<p>未查询到相关数据</p>';
}

关键细节说明

  • 安全防护:用htmlspecialchars()转义所有输出内容,避免XSS攻击;同时对输入参数$agcid做了转义,杜绝SQL注入风险。
  • 分组逻辑:利用SQL已按rcabbr排序的特性,遍历过程中只需判断当前行的分组标识与上一行是否一致,不一致就输出新的分组标题,无需额外做数组分组操作。
  • 样式自定义:分组标题行和表头加了基础样式,你可以根据自己的布局需求修改CSS属性(比如把内联样式移到外部样式表)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:42:59