Moodle Complex SQL无法正常工作

时间:2017-04-28 15:00:38

标签: php mysql moodle

我正在为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中所说: enter image description here

但是这里是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 ) )

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

高兴地收到任何建议,

非常感谢

戴夫

1 个答案:

答案 0 :(得分:1)

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

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

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

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

在你再编写Moodle代码之前,请打开developer debugging,因为在这种情况下会给你一个警告信息。