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

CodeIgniter中广告展示次数统计与更新的优化方案咨询

优化CodeIgniter广告展示次数更新方案

方案一:实时批量更新本次展示的广告

针对每次展示的3个广告,用单条SQL语句批量更新它们的count_ads字段,避免多次查询或全量更新的开销。

实现代码(CodeIgniter Query Builder)

// $displayedAdIds为本次展示的3个广告ID数组
$displayedAdIds = [12, 34, 56];

$this->db->set('count_ads', 'count_ads + 1', FALSE);
$this->db->where_in('id', $displayedAdIds);
$this->db->update('ads_sponsers');
  • 说明:第三个参数FALSE用于告知CodeIgniter不转义count_ads + 1表达式,确保SQL正确执行自增操作。
  • 优势:仅需1次SQL查询,性能开销极低,且只更新需要统计的广告,不会冗余操作其他数据。

方案二:定时批量同步日志数据(非实时场景)

如果对count_ads的实时性要求不高,可定期从ads_sponsers_log表汇总展示次数,批量更新到主表,减少实时请求的负载。

实现代码(CodeIgniter原生SQL执行)

UPDATE ads_sponsers a
INNER JOIN (
    SELECT ad_id, COUNT(*) AS display_count
    FROM ads_sponsers_log
    -- 统计最近1小时未同步的日志,可根据需求调整时间范围或标记已同步数据
    WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 HOUR)
    GROUP BY ad_id
) b ON a.id = b.ad_id
SET a.count_ads = a.count_ads + b.display_count;

在CodeIgniter中执行该SQL:

$sql = "UPDATE ads_sponsers a INNER JOIN (...) b ON a.id = b.ad_id SET a.count_ads = a.count_ads + b.display_count";
$this->db->query($sql);
  • 配套操作:编写CodeIgniter CLI同步脚本,通过服务器Cron任务定时执行(比如每小时一次),避免在Web请求中处理耗时统计。
  • 优势:大幅降低实时更新频率,适合展示次数统计无需绝对精准的场景。

注意事项

  • 实时批量更新方案需确保展示广告时正确记录本次展示的广告ID数组,避免遗漏或错误更新。
  • 定时同步方案若需更精准统计,可在ads_sponsers_log表添加synced字段,标记已同步日志,防止重复统计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:42:36