Codeigniter Query Builder统计下划线前缀唯一的记录类别数问题
嘿,我来帮你搞定这个统计问题!
你之前的思路偏了——用like去匹配特定后缀根本没法实现“按前缀分组、每个前缀计1次”的需求,还会漏掉后缀不符合的记录,比如示例里的2315_2b就被忽略了对吧?
正确的实现思路
核心是从name字段中提取下划线前的前缀,然后按这个前缀分组,每个分组只统计1次(不管该前缀下有多少条记录)。我们可以用SQL的SUBSTRING_INDEX函数来提取前缀,再结合CodeIgniter的Query Builder来实现。
代码实现
如果要列出每个前缀及其对应的统计数(每个前缀显示1):
// 提取前缀并设置别名,第二个参数FALSE避免CodeIgniter自动给函数加反引号 $this->db->select("SUBSTRING_INDEX(name, '_', 1) AS prefix", FALSE); // 每个前缀计1次 $this->db->select('1 AS count', FALSE); // 按前缀分组 $this->db->group_by('prefix'); // 执行查询 $query = $this->db->get('table'); // 返回结果集,格式和你期望的一致 return $query->result();
如果只需要统计总共有多少个不同的前缀(总数):
$this->db->select("COUNT(DISTINCT SUBSTRING_INDEX(name, '_', 1)) AS total_count", FALSE); $query = $this->db->get('table'); // 返回总数 return $query->row()->total_count;
结果说明
针对你给出的示例数据,第一个代码会返回如下结果:
| prefix | count |
|---|---|
| 1212 | 1 |
| 1243 | 1 |
| 3142 | 1 |
| 2315 | 1 |
| 8562 | 1 |
完全符合你的期望!
内容的提问来源于stack exchange,提问作者fips123
相关产品推荐
相关产品推荐

