0
私は以下のテーブルを持っています。私はAndroidのクイズアプリケーションにこれを使用しています。私はクイズを取ることができない学生をフェッチしたい。ここmySQL - 複数のテーブルを結合する
表クイズ
+-------------------------------------------------------------------+
| id | title | start | end | class_name | user_faculty |
+-------------------------------------------------------------------+
| 1 | Quiz 1 | 2016-08-01 | 2016-08-03 | T4 | faculty_1 |
+-------------------------------------------------------------------+
| 2 | Quiz 2 | 2016-08-01 | 2016-08-03 | T4 | faculty_1 |
+-------------------------------------------------------------------+
| 3 | Quiz 3 | 2016-08-03 | 2016-08-04 | T4 | faculty_1 |
+-------------------------------------------------------------------+
表studentclass
+-----------------------------------------------+
| id | class_name | user_faculty | user_student |
+-----------------------------------------------+
| 1 | T4 | faculty_1 | student_1 |
+-----------------------------------------------+
| 2 | T4 | faculty_1 | student_2 |
+-----------------------------------------------+
私の最初のクエリは次のとおりです。
SELECT Q.id, Q.title, Q.start, Q.end
FROM quiz Q
INNER JOIN studentclass SC
ON Q.class_name = SC.class_name
AND Q.start_on <= now()
AND Q.end_on >= now()
AND SC.user_student = 'student_1'
は、日付が今日は2016年8月2日
であることを考えます私はできるクイズテーブル
+---------------------------------------+
| id | title | start | end |
+---------------------------------------+
| 1 | Quiz 1 | 2016-08-01 | 2016-08-03 |
+---------------------------------------+
| 2 | Quiz 2 | 2016-08-01 | 2016-08-03 |
+---------------------------------------+
の第一及び第二の行をフェッチするために今、私はまた、この前のクエリと一緒にスコアテーブルを取得したいです。学生 'student_1'がクイズを終了しました。
表得点
+--------------------------------------------------------+
| id | score | grade | user_student | quiz_id | status |
+--------------------------------------------------------+
| 1 | 10 | 100 | student_1 | 1 | Finished |
+--------------------------------------------------------+
私の新しいクエリ
SELECT Q.id, Q.title, Q.start, Q.end, S.user_student, S.status
FROM quiz Q
INNER JOIN studentclass SC
ON Q.class_name = SC.class_name
AND Q.start_on <= now()
AND Q.end_on >= now()
AND SC.user_student = 'student_1'
LEFT JOIN score S
ON Q.id = S.quiz_id
WHERE S.quiz_id IS NULL
結果が
+---------------------------------------------------------------+
| id | title | start | end | user_student | status |
+---------------------------------------------------------------+
| 2 | Quiz 2 | 2016-08-01 | 2016-08-03 | NULL | NULL |
+---------------------------------------------------------------+
は、結果がうまく行っているが、私はstudent_1を変更すると、私の第二のクエリでstudent_2することです私はまだ同じ結果を得ています。 student_2は、まだクイズを取っていないので、両方のクイズの行を表示する必要があります。
SELECT Q.id, Q.title, Q.start, Q.end, S.user_student, S.status
FROM quiz Q
INNER JOIN studentclass SC
ON Q.class_name = SC.class_name
AND Q.start_on <= now()
AND Q.end_on >= now()
AND SC.user_student = 'student_2' //this is where I changed the student_1 to student_2
LEFT JOIN score S
ON Q.id = S.quiz_id
WHERE S.quiz_id IS NULL
は、問題はあなたがチェックしていないということであると思われる回答