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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:54:02