Moodle Complex SQL 不工作

Moodle Complex SQL not working

我正在为 Moodle 3.2 在 PHP 中编写一个块,但我遇到了一些困难 SQL 无法正常工作。

基本上我想获得所有用户在课程中所有测验的测验分数。

我的 SQL 在 phpMyAdmin 中工作

SELECT u.id, u.firstname, u.lastname, qg.quiz, qg.grade, 
     q.grade as maxgrade, q.name 
FROM mdl_quiz_grades qg 
JOIN mdl_user u ON u.id = qg.userid 
JOIN mdl_quiz q ON q.id = qg.quiz 
WHERE q.course = 2 

正如我在 MySQL 中所说的那样:

但是这里是 Moodle 中的 PHP 代码:

$sql = "
SELECT  u.id, u.firstname, u.lastname, 
        qg.quiz, qg.grade, q.grade AS maxgrade, q.name 
FROM {quiz_grades} qg 
JOIN {user} u ON u.id = qg.userid 
JOIN {quiz} q ON q.id = qg.quiz 

WHERE q.course = ?"; 
$params = array($COURSE->id);**//NB Course ID is 2**
$records = $DB->get_records_sql($sql, $params);
print_r($records);

只生成 QUIZ id 也为 2 的两条记录。

Array ( [5] => stdClass Object ( [id] => 5 [firstname] => Bart [lastname] => Simpson [quiz] => 2 [grade] => 5.00000 [maxgrade] => 10.00000 [name] => Quiz 2 ) [6] => stdClass Object ( [id] => 6 [firstname] => Lisa [lastname] => Simpson [quiz] => 2 [grade] => 5.00000 [maxgrade] => 10.00000 [name] => Quiz 2 ) )

我不清楚哪里出错了,但也不清楚为什么会得到两个不同的结果

很高兴收到任何建议,

非常感谢

戴夫

当您使用任何 Moodle $DB->get_records* 函数时,结果将作为数组返回,由检索到的第一个字段索引

因此,在这种情况下,数组将由用户 ID 索引 - 因此只有 2 条记录,因为只有 2 个不同的用户 ID。

如果您想使用 $DB->get_records* 函数,您必须确保第一个字段是唯一的(例如 'qg.id')。

或者,您可以使用 $DB->get_recordset_sql(),这样您就可以遍历结果,而不必担心重复的 ID。

在您编写更多 Moodle 代码之前,请打开 developer debugging,因为在这种情况下它会给您一条警告消息。