我正在为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
但是这里是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 ) )
我不清楚我哪里出错了,但也知道为什么我会得到两个不同的结果
高兴地收到任何建议,
非常感谢
戴夫
答案 0 :(得分:1)
当您使用任何Moodle $ DB-> get_records *函数时,结果将作为数组返回,由检索到的第一个字段索引。
因此,在这种情况下,数组将由userid索引 - 因此只有2条记录,因为只有2个不同的用户ID。
如果你想使用$ DB-> get_records *函数,你必须确保第一个字段是唯一的(例如'qg.id')。
或者,您可以使用$ DB-> get_recordset_sql(),这样您就可以遍历结果,而无需担心重复的ID。
在你再编写Moodle代码之前,请打开developer debugging,因为在这种情况下会给你一个警告信息。