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,因为在这种情况下它会给您一条警告消息。
我正在为 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,因为在这种情况下它会给您一条警告消息。