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

CodeIgniter查询分组Datatables按日期分组并拆分早中晚时间列

解决Datatables日期归类及时间段列划分问题

1. 修正CodeIgniter查询逻辑

先把SQL查询调整为按日期分组,同时通过条件判断拆分各时间段的记录。假设你的表是records,datetime字段为record_datetime,要展示的内容字段为content:

$this->db->select("
    DATE(record_datetime) AS record_date,
    GROUP_CONCAT(CASE WHEN TIME(record_datetime) BETWEEN '00:00:00' AND '11:59:59' THEN content SEPARATOR '<br>' END) AS morning,
    GROUP_CONCAT(CASE WHEN TIME(record_datetime) BETWEEN '12:00:00' AND '17:59:59' THEN content SEPARATOR '<br>' END) AS afternoon,
    GROUP_CONCAT(CASE WHEN TIME(record_datetime) BETWEEN '18:00:00' AND '23:59:59' THEN content SEPARATOR '<br>' END) AS evening
");
$this->db->from('records');
$this->db->group_by('DATE(record_datetime)');
$query = $this->db->get();
return $query->result();

核心要点:

  • 用DATE()提取日期部分作为唯一分组依据,避免同日期出现多行
  • 通过CASE语句精准划分上午/下午/晚上的时间边界,结合GROUP_CONCAT()把同时间段的内容拼接成可直接展示的格式(如果是统计数量,把GROUP_CONCAT换成COUNT即可)
  • 若需要显示空值占位符,后续在Datatables渲染时处理

2. 配置Datatables前端渲染

如果用服务器端模式,要保证columns配置和后端返回的字段一一对应:

$('#target-table').DataTable({
    processing: true,
    serverSide: true,
    ajax: '/your/controller/data-method',
    columns: [
        { data: 'record_date', title: '日期' },
        { data: 'morning', title: '上午', render: function(data) {
            return data || '-'; // 空值显示短横线
        } },
        { data: 'afternoon', title: '下午', render: function(data) {
            return data || '-';
        } },
        { data: 'evening', title: '晚上', render: function(data) {
            return data || '-';
        } }
    ]
});

3. 常见问题排查

  • 同日期出现多行:检查GROUP BY语句,确保只按DATE(record_datetime)分组,不要混入其他会拆分分组的字段
  • 时间段分类错误:验证TIME()和BETWEEN的边界值,比如确认12:00:00被正确归到下午,避免漏判边界时间
  • 内容未拼接:如果GROUP_CONCAT返回内容截断,可临时调整数据库参数:SET SESSION group_concat_max_len = 10000;(放在查询前执行)

内容的提问来源于stack exchange,提问作者Jeron Caperiña

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:37:17