Невозможно запросить дату с оценкой, используя Ad Ho c Query - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время я работаю над созданием запросов Ad Ho c для извлечения из нашей базы данных Moodle. Я пытаюсь собрать имя клиента, какой курс он прошел, какую оценку он получил, и когда он сдал экзамен или был оценен.

Я обнаружил, что таблица grade_grades в Moodle позволит мне получить все эти значения данных. Тем не менее, у нас есть установленный процесс отмены регистрации после завершения курса. Как только этот процесс отмены регистрации заканчивается, отчет с grade_grades перемещается на grade_grades_history.

В этом запросе ниже я могу получить всю информацию, которую пытаюсь запросить, кроме времени. Я понимаю, что в настоящее время я не запрашиваю запрос, чтобы получить это значение, потому что, когда я делаю это, это нарушает запрос. Я ищу мысли или информацию о том, как можно интегрировать время и в этот запрос.

SELECT 
   prefix_grade_items.itemname,
   prefix_grade_items.grademax,
   ROUND(prefix_grade_grades_history.finalgrade, 0) AS finalgrade,
   prefix_user.firstname,
   prefix_user.lastname,
   prefix_user.username

FROM prefix_grade_grades_history
 JOIN prefix_user ON prefix_grade_grades_history.userid = prefix_user.id
 JOIN prefix_grade_items ON prefix_grade_grades_history.itemid = prefix_grade_items.id
WHERE (prefix_grade_items.itemname IS NOT NULL)
   AND (prefix_grade_items.itemtype = 'mod' OR prefix_grade_items.itemtype = 'manual')
   AND (prefix_grade_items.itemmodule = 'quiz' OR prefix_grade_items.itemmodule IS NULL)
   AND (prefix_grade_grades_history.timemodified IS NOT NULL)
   AND (prefix_grade_grades_history.finalgrade > 0)
   AND (prefix_user.deleted = 0)

Большая часть первой части - это то, что я собираюсь вытащить. Вторая часть - то, как я хотел бы, чтобы это доставлялось, а также дополнительные критерии для сортировки данных NULL.

1 Ответ

0 голосов
/ 27 февраля 2020

Когда я в последний раз писал запрос для проверки окончательных оценок Moodle, его адаптация к потребностям вашего столбца выглядела примерно так:

SELECT c.shortname, 
    gi.grademax,
    round(gg.finalgrade,0) as finalgrade,
    round((gg.finalgrade/case when gg.rawgrademax = 0 then 1 else gg.rawgrademax end)*100,0) as percent_final, 
    u.firstname,
    u.lastname, 
    u.username,
    FROM_UNIXTIME(gg.timemodified,'%W %e %M, %Y') as Date_Completed

FROM prefix_grade_grades_history gg    
INNER JOIN prefix_grade_items gi ON gi.id=gg.itemid and gi.itemtype='course'
INNER JOIN prefix_user u ON u.id=gg.userid    
INNER JOIN prefix_course c on c.id = gi.courseid   

WHERE  gg.finalgrade > 0
    AND gg.timemodified IS NOT NULL
    AND u.deleted = 0
    AND gg.timemodified >= UNIX_TIMESTAMP( :start_date )
    AND ggh.timemodified <= UNIX_TIMESTAMP( :end_date )
...