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

如何在CodeIgniter中实现MySQL表按vname分组展示cname数据

按vname分组展示cname的实现方案

首先,先明确你的数据源和期望效果:

原表数据

你的MySQL表结构和数据如下:

cnamevnamecurl
A1url1
A2url2
B1url3
B3url4
C2url5
C3url5
C4url6
D2url7

期望输出

你想要把数据转成按vname作为列,同一列下的cname按行排列的表格:

1234
AABC
BCC
D

你已尝试的CodeIgniter代码

你提到已经写了部分查询代码:

$this->db->distinct();
$this->db->select('vname, cname, curl');
$this->db->from('tablename'); // 这里假设你填写了完整表名

接下来我给你完整的实现思路和代码:

步骤1:从数据库获取并整理数据

首先我们需要先拿到所有唯一的vname(作为表格的表头),然后把每个vname对应的cname分组存起来:

// 获取所有排序后的唯一vname
$vnameQuery = $this->db->select('DISTINCT vname')
                       ->from('tablename')
                       ->order_by('vname', 'ASC')
                       ->get();
$vnameList = array_column($vnameQuery->result_array(), 'vname');

// 获取所有vname和cname的对应关系
$dataQuery = $this->db->select('vname, cname')
                      ->from('tablename')
                      ->order_by('vname', 'ASC')
                      ->get();
$rawData = $dataQuery->result_array();

// 按vname分组cname,若需去重可添加array_unique逻辑
$groupedData = [];
foreach ($rawData as $item) {
    $v = $item['vname'];
    if (!isset($groupedData[$v])) {
        $groupedData[$v] = [];
    }
    // 可选:如果要去重同一vname下的cname,取消下面注释即可
    // if (!in_array($item['cname'], $groupedData[$v])) {
    $groupedData[$v][] = $item['cname'];
    // }
}

步骤2:构建表格的行数据

我们需要找到分组后最多的cname数量,以此作为表格的行数,然后逐行填充每个列的内容:

// 计算最大行数
$maxRowCount = 0;
foreach ($groupedData as $cnames) {
    $maxRowCount = max($maxRowCount, count($cnames));
}

// 生成每一行的内容
$tableRows = [];
for ($i = 0; $i < $maxRowCount; $i++) {
    $currentRow = [];
    foreach ($vnameList as $vname) {
        // 存在对应位置的cname就取值,否则留空
        $currentRow[] = isset($groupedData[$vname][$i]) ? $groupedData[$vname][$i] : '';
    }
    $tableRows[] = $currentRow;
}

步骤3:在视图中渲染表格

最后把$vnameList和$tableRows传到视图里,渲染成表格:

<table border="1">
    <thead>
        <tr>
            <?php foreach ($vnameList as $v): ?>
                <th><?= $v ?></th>
            <?php endforeach; ?>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($tableRows as $row): ?>
            <tr>
                <?php foreach ($row as $cell): ?>
                    <td><?= $cell ?></td>
                <?php endforeach; ?>
            </tr>
        <?php endforeach; ?>
    </tbody>
</table>

这样就能得到你想要的展示效果了。如果有特殊需求(比如调整排序规则、过滤特定数据),可以在分组数据的环节做对应的修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:00:40