1

クエリで生徒の成績と成績を取得しようとしていますが、結合を計算できません。非常に複雑なデータベースです。誰かが以前にそれをしたことがありますか?

以下のクエリ(自分で変更したテーブル)は、一部の学生には機能しますが、他の学生には機能しないため、元のテーブル構造を持つ適切なクエリが必要です。

ありがとう

MY FAULTY QUERY

SELECT mdl_grade_items.id AS ItemID,
       mdl_course.shortname AS CourseShortname,
       mdl_grade_items.itemname AS ItemName,
       mdl_grade_items.grademax AS ItemGradeMax,
       mdl_grade_items.aggregationcoef AS ItemAggregation,
       mdl_grade_grades.finalgrade AS FinalGrade,
       mdl_user.username AS StudentID,
       mdl_user.id
FROM mdl_grade_items
  INNER JOIN mdl_grade_grades 
    ON mdl_grade_items.id = mdl_grade_grades.itemid
  INNER JOIN mdl_role_assignments 
    ON mdl_grade_grades.userid = mdl_role_assignments.userid 
    AND mdl_grade_items.courseid = mdl_role_assignments.mdlcourseid
  INNER JOIN mdl_course 
    ON mdl_course.id = mdl_grade_items.courseid
  INNER JOIN mdl_user 
    ON mdl_user.id = mdl_role_assignments.userid
WHERE mdl_grade_items.courseid = '2864' 
  AND mdl_user.username = '123456789'
4

1 に答える 1

5

学生の登録ステータスを無視すると、クエリを簡略化できます(必要に応じて後で学生をフィルタリングすることもできます)。

コース内のユーザーのすべての成績を示す例を次に示します。

  SELECT 
  u.id AS userid,
  u.username AS studentid,
  gi.id AS itemid,
  c.shortname AS courseshortname,
  gi.itemname AS itemname,
  gi.grademax AS itemgrademax,
  gi.aggregationcoef AS itemaggregation,
  g.finalgrade AS finalgrade
  FROM mdl_user u
  JOIN mdl_grade_grades g ON g.userid = u.id
  JOIN mdl_grade_items gi ON g.itemid =  gi.id
  JOIN mdl_course c ON c.id = gi.courseid
  WHERE gi.courseid  = :courseid AND u.username = :username;

それが合わない場合は、技術的でない観点から何を達成しようとしているのかを説明できるかもしれません。

于 2012-11-28T05:59:22.953 に答える