Moodle过滤器--按组划分

问题描述 投票:0回答:1

当GROUP BY - select form被用作过滤mform字段时,我们如何能得到工作的moodle过滤器。我没有得到所需的输出,当我选择课程。当调用sql_like函数时,GROUP BY没有被考虑。

require_once($CFG->dirroot.'/filter_form.php');    
$mform = new filter_form();
$coursefilter = '';

if ($formdata = $mform->get_data()) {
    $coursefilter = $formdata->course;
}

$mform->set_data($formdata);
$mform->display();

$reporttable = new html_table();
$reporttable->head = array('course', 'users');
$reporttable->attributes['class'] = 'table';

$sql = "SELECT c.fullname, count(cc.userid) AS 'completed'
        FROM {course_completions} cc JOIN {course} ON c.id = cc.course WHERE cc.timestarted > 0
        GROUP BY c.fullname ";

$params = array();
if (!empty($coursefilter)) {
    $params['fullname'] = '%' . $DB->sql_like_escape($coursefilter) . '%';  
    $sql .= " AND " . $DB->sql_like('c.fullname', ':fullname', false);
}

$mds = $DB->get_records_sql($sql, $params);    
foreach ($mds as $m) {
    $reporttable->data[] = new html_table_row(array(implode(array($m->fullname. $m->lastname)), 
                           $m->completed ));
}                              
echo html_writer::table($reporttable); 
moodle
1个回答
0
投票

在过滤器后添加GROUP BY。

if (!empty($coursefilter)) {
    $params['fullname'] = '%' . $DB->sql_like_escape($coursefilter) . '%';  
    $sql .= " AND " . $DB->sql_like('c.fullname', ':fullname', false);
}

$sql .= " GROUP BY c.fullname ";
© www.soinside.com 2019 - 2024. All rights reserved.