1

特定のコースのすべてのセクションについて、特定のユーザーが取得した合計点数を取得しようとしています。

次のクエリは機能し、mysql では正しい結果が得られますが、Databse API 呼び出しでは得られません。

$sql = "SELECT d.section as section_id,d.name as section_name, sum(a.sumgrades) A​​S mark FROM mdl_quiz_attempts a, mdl_quiz b, mdl_course_modules c, mdl_course_sections d WHERE a.userid=6 AND b.course=4 AND a.quiz=b.id AND c.instance=a.quiz AND c.module=14 AND a.sumgrades>0 AND d.id=c.section GROUP BY d.section"

私はさまざまなAPI呼び出しを試しましたが、主に私が望むでしょう

$DB->get_records_sql($sql);

API 呼び出しの結果は無意味です。なにか提案を?

PS : これはmoodle 2.2です。

4

2 に答える 2

2

セクションを取得せずに、似たようなことをやろうとしました。コースとユーザー ID のみが必要です。これがお役に立てば幸いです。

global $DB;

// get all attempts & grades from a user from every quiz of one course 
$sql = "SELECT qa.id, qa.attempt, qa.quiz, qa.sumgrades AS grade, qa.timefinish, qa.timemodified, q.sumgrades, q.grade AS maxgrade
        FROM {quiz} q, {quiz_attempts} qa
        WHERE q.course=".$courseid."
        AND qa.quiz = q.id
        AND qa.userid = ".$userid."
        AND state = 'finished'
        ORDER BY qa.timefinish ASC"; 
$exams = $DB->get_records_sql($sql);

// calculate final grades from sum grades
$grades = array();
foreach($exams as $exam) {
    $grade = new stdClass;
    $grade->quiz = $exam->quiz;
    $grade->attempt = $exam->attempt;
    // sum to final
    $grade->finalgrade = $exam->grade * ($exam->maxgrade / $exam->sumgrades);
    $grade->grademax = $exam->maxgrade;
    $grade->timemodified = $exam->timemodified;
    array_push($grades, $grade);
} 
于 2013-10-31T20:07:15.673 に答える