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

如何在PHP和MySQL中动态使用rowspan生成合并单元格表格?

解决方案:实现合并rowspan的表格

没问题,我来帮你搞定这个单元格合并的需求!要实现你想要的 rowspan 效果,核心思路是先按 ward_no 分组统计每个组的记录数,然后在渲染表格时,只在每组的第一行输出带 rowspan 属性的 ward 单元格,后续行跳过这个单元格即可。

具体修改步骤:

  1. 优化查询语句:添加 ORDER BY ward_no 确保同个 ward 的记录连续排列,避免分组混乱;同时改用预处理语句规避 SQL 注入风险(这是生产环境必须注意的安全要点)。
  2. 分组存储数据:把查询结果按 ward_no 归类,方便统计每个 ward 对应的子区块数量,以此确定 rowspan 的值。
  3. 调整表格渲染逻辑:遍历分组后的数据,在每组第一行设置 rowspan 为该组的记录数,后续行仅输出子区块单元格。

修改后的完整代码:

if(isset($_POST["union_id"]) && !empty($_POST["union_id"])) {
    // 使用预处理语句避免SQL注入,若union_id是字符串类型,将"i"替换为"s"
    $stmt = $mysqli->prepare("SELECT * FROM test_epi_table WHERE union_id = ? ORDER BY ward_no");
    $stmt->bind_param("i", $_POST['union_id']);
    $stmt->execute();
    $query = $stmt->get_result();

    // 统计总记录数
    $rowCount = $query->num_rows;

    // 渲染表格内容
    if($rowCount > 0) {
        echo "<hr>";
        echo "<h3 align='center'>EPI Schedule</h3>";
        echo "<table class='table table-bordered'> 
                <tr> 
                    <th>Ward No</th> 
                    <th>Sub-Block</th> 
                </tr>";

        // 将查询结果按ward_no分组
        $wardGroups = [];
        while($row = $query->fetch_assoc()) {
            $wardNo = $row['ward_no'];
            if(!isset($wardGroups[$wardNo])) {
                $wardGroups[$wardNo] = [];
            }
            $wardGroups[$wardNo][] = $row['sub_block_name'];
        }

        // 遍历分组数据生成表格行
        foreach($wardGroups as $wardId => $subBlocks) {
            $blockCount = count($subBlocks);
            $isFirstRow = true;
            foreach($subBlocks as $blockName) {
                echo "<tr>";
                // 仅组内第一行输出带rowspan的ward单元格
                if($isFirstRow) {
                    echo "<td rowspan='{$blockCount}'>{$wardId}</td>";
                    $isFirstRow = false;
                }
                echo "<td>{$blockName}</td>";
                echo "</tr>";
            }
        }

        echo "</table>";
        echo "<hr>";
    } else {
        echo "<br>";
        echo "<h3 align='center'>Sorry, No Available Information!</h3>";
        echo "<hr>";
    }
}

关键细节说明:

  • SQL安全优化:替换了原代码直接拼接参数的写法,防止恶意输入引发的SQL注入攻击,这是线上项目必须重视的安全规范。
  • 数据分组逻辑:通过遍历查询结果,将同一 ward 的子区块归类存储,确保能准确获取每个 ward 的记录数量,从而设置正确的跨行合并属性。
  • 表格渲染逻辑:每组的第一行渲染合并后的 ward 单元格,后续行仅渲染子区块列,完美实现了你想要的跨行合并效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:49