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

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;

结果说明

针对你给出的示例数据,第一个代码会返回如下结果:

prefixcount
12121
12431
31421
23151
85621

完全符合你的期望!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:49:54