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
相关产品推荐
相关产品推荐

