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

CodeIgniter3 Query Builder join方法问题:查询记录重复

嗨,我来帮你搞定这个重复记录的问题~

问题根源

你遇到的重复是因为category_level_1里的每条一级分类,在category_level_2中对应了多条二级分类记录。使用内连接后,数据库会把每个二级分类和对应的一级分类做匹配,所以同一个一级分类会被输出多次,就出现了重复。

数据库表说明

  • category_level_1表:存储一级分类数据,包含唯一标识id和分类名称category字段
  • category_level_2表:存储二级分类数据,通过cat_lvl1_id字段关联到category_level_1的id,一个一级分类对应多条二级分类记录

当前问题表现

执行现有查询后,输出结果中一级分类记录重复出现,每关联一条二级分类,对应的一级分类就会被打印一次。

解决方案

这里有两种简单的方法可以解决这个问题,都能通过CodeIgniter 3的Query Builder轻松实现:

方法1:用distinct()去重

直接在查询链中添加distinct()方法,它会自动过滤掉完全重复的记录:

$query = $this->db->select('category_level_1.id, category_level_1.category')
                  ->from('category_level_1')
                  ->join('category_level_2', 'category_level_2.cat_lvl1_id = category_level_1.id', 'inner')
                  ->distinct()
                  ->get();

方法2:用group_by()分组

通过一级分类的唯一标识id进行分组,确保每个一级分类只被返回一次:

$query = $this->db->select('category_level_1.id, category_level_1.category')
                  ->from('category_level_1')
                  ->join('category_level_2', 'category_level_2.cat_lvl1_id = category_level_1.id', 'inner')
                  ->group_by('category_level_1.id')
                  ->get();

这两种方法都能帮你得到期望的无重复结果。如果之后你需要统计每个一级分类下的二级分类数量这类聚合数据,group_by会更灵活;如果只是单纯去重,distinct写法更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:31:28