私はMySQL
このような2つのテーブルを持っています:
desc students;
+---------------------------+---------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------------------+---------------+------+-----+---------+
| student_id | int(11) | NO | PRI | NULL |
| student_firstname | varchar(255) | NO | | NULL |
| student_lasttname | varchar(255) | NO | | NULL |
+---------------------------+---------------+------+-----+---------+
desc studentabsence;
+---------------------------+-------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------------------+-------------+------+-----+---------+
| student_absence_id | int(11) | NO | PRI | NULL |
| student_id | int(11) | YES | | NULL |
| student_absence_startdate | date | YES | | NULL |
| student_absence_enddate | date | YES | | NULL |
| student_absence_type | varchar(45) | YES | | NULL |
+---------------------------+-------------+------+-----+---------+
それから私はこれを持っていますMySQL
-学生をリストするためのクエリ。
クエリ:
SELECT s.student_id, s.student_firstname, s.student_lastname,
a.student_absence_startdate, a.student_absence_enddate, a.student_absence_type
FROM students s LEFT JOIN studentabsence a ON a.student_id = s.student_id
学生が欠席情報を持っているときはいつでも、これは列に表示されます
a.student_absence_startdate
a.student_absence_enddate
a.student_absence_type
生徒がテーブルに2つ以上の行を持っている場合、その生徒はstudentabsence
2回リストされます。
私の質問は、クエリをより具体的にする方法があるかどうかです。からのすべての学生をリストしたいと思いdb.students
ますdb.studentabsence
。開始日と終了日の間の日付(たとえば、2012-07-30)の行がある場合は、この欠席情報を使用して学生を1回リストします。日付に一致する場合のみ。
だから...
... WHERE (a.student_absence_startdate OR a.student_absence_enddate) IS NULL OR
'2012-07-30' BETWEEN a.student_absence_startdate AND
a.student_absence_enddate ...
説明するのはちょっと難しいので、もっと情報が必要な場合は教えてください...