如何在CodeIgniter 4中编写(3*SUM(tanding.menang))+SUM(tanding.seri) AS poin查询
CodeIgniter 4 自定义聚合计算字段查询实现方法
在CI4中你可以直接通过查询构建器的select()方法实现你需要的计分逻辑,核心注意点是需要关闭select的自动字段转义,避免计算式被错误解析。
基础实现示例
直接通过数据库实例创建查询构建器:
// 初始化数据库连接 $db = \Config\Database::connect(); $builder = $db->table('tanding'); // 构造查询语句 $query = $builder->select('(3*SUM(tanding.menang))+SUM(tanding.seri) AS poin', false) // 按需添加查询条件、分组规则,示例按队伍ID分组统计每个队伍的总分 ->where('season', 2024) // 示例条件,不需要可以删除 ->groupBy('team_id') // 示例分组,不需要可以删除 ->get(); // 获取查询结果 $poinList = $query->getResult(); // 多条结果用这个 // $poin = $query->getRow(); // 单条结果用这个
在Model中使用的示例
如果你已经创建了对应tanding表的Model,可以直接在Model方法中封装该查询:
namespace App\Models; use CodeIgniter\Model; class TandingModel extends Model { protected $table = 'tanding'; // 其他Model配置省略 // 自定义计分查询方法 public function calculateTeamPoin() { return $this->select('(3*SUM(tanding.menang))+SUM(tanding.seri) AS poin', false) ->groupBy('team_id') ->findAll(); } }
注意事项
select()方法的第二个参数必须传false,作用是关闭CI4的自动字段转义逻辑,否则系统会把你的计算式识别为普通字段名,添加多余的反引号导致SQL报错。- 如果需要同时查询其他字段,直接在select的第一个参数字符串中追加即可,例如要同时返回队伍ID和名称可以写成
select('team_id, team_name, (3*SUM(tanding.menang))+SUM(tanding.seri) AS poin', false)。 - 聚合查询请根据实际业务需求配置
groupBy条件,否则默认会将整张表的所有数据汇总为一条结果。
内容的提问来源于stack exchange,提问作者Sailor Solar
相关产品推荐
相关产品推荐

