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

Moodle中分组数据的计数实现问题

问题:Moodle数据库按date和ustd分组并统计记录数

需求说明

从Moodle的lbtb_schulzentrum表读取数据,按date和ustd字段分组,同时统计每组的记录数量,最终每组显示一条记录并附带对应计数。

当前未实现分组统计的代码

$lbtbs = $DB->get_records('lbtb_schulzentrum', null, 'date,ustd', 'id,date,ustd,eintrag,sus,bgcolor');

foreach ($lbtbs as $lbtb) {
    $data[$lbtb->date][$lbtb->ustd] = array("date" => $lbtb->date, "id" => $lbtb->id, "start" => $lbtb->ustd, "description" => $lbtb->eintrag, "sus" => $lbtb->sus, "color" => $lbtb->bgcolor);
}

现有数据示例

iddateustd
12024-08-221
22024-08-221
32024-08-222
42024-08-222
52024-08-223

期望输出

iddateustdcount
12024-08-2212
32024-08-2222
52024-08-2231

错误尝试(未添加GROUP BY)

此前尝试使用COUNT函数但未正常输出,代码如下:

$lbtbs = $DB->get_records_sql('SELECT id,date,ustd,bgcolor,sus, COUNT(sus) FROM {lbtb_schulzentrum}');

$data = array();

foreach ($lbtbs as $lbtb) {
    $data[$lbtb->date][$lbtb->ustd] = array("date" => $lbtb->date, "id" => $lbtb->id, "start" => $lbtb->ustd, "color" => $lbtb->bgcolor);
}

问题核心:缺少GROUP BY子句,COUNT无法按指定字段分组统计;同时未给计数字段命名,后续无法直接调用该值。

正确解决方案

使用get_records_sql执行分组查询,添加GROUP BY date,ustd,并用COUNT(*) AS count为计数字段命名:

$lbtbs = $DB->get_records_sql('SELECT id,date,ustd,bgcolor,sus, COUNT(*) AS count FROM {lbtb_schulzentrum} GROUP BY date,ustd');

后续循环处理时,可直接获取每组的count值,整理成期望的输出结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:23:10