詳細モードの問題は次のとおりです。認定テーブルに認定のインスタンスがあり、それらにはすべてタイプと学生が関連付けられています。これが私がやりたいことです。日付範囲内(今から1年まで)の有効期限を持つすべての証明書を取得したいと考えています。彼らがそのパラメーターの資格がある場合は素晴らしいですが、範囲内にある証明書と同じタイプである場合、範囲よりも長い証明書の有効期限がある場合は学生を除外したいと思います-彼らは範囲内にいる必要はありませんレポート。これが私が持っている最初のクエリです:
SELECT s.student_id, s.fname, s.address1, s.lname, s.zip, s.state, s.city, s.student_type
FROM students s, certifications c
WHERE ( s.student_id = c.student_id )
AND s.status='A'
AND s.student_type != 'B'
AND s.student_type != 'D'
AND s.student_type != 'E'
AND s.student_type != 'W'
AND s.student_type != 'T'
AND s.student_type != 'I'
AND c.expiration >= CURDATE() AND c.expiration <= DATE_ADD(NOW(), INTERVAL 1 YEAR)
GROUP BY s.student_id
ORDER BY s.lname, s.fname
次に、実際に取得する sql は、前の sql ステートメントに基づいて証明書の情報です。
SELECT c.cert_num, c.date, expiration, ct.name, ct.cert_type, c.cert_id, c.student_id
FROM certifications c, cert_type ct
WHERE student_id = '{$Row['student_id']}'
AND ct.cert_type = c.cert_type
ORDER BY ct.name ASC, expiration DESC
要約すると、私が直面している問題は、証明書の有効期限が今から 1 年以内にある場合、および有効期限が範囲を超える同じタイプの別の証明書を持っている場合に学生が現れることです。それは良くないね。
特定の証明書タイプが日付の範囲内にあることを確認する方法はありますか?もしそうなら、範囲を超える同じタイプの証明書がないことを確認してください。別の SQL クエリが必要かどうかは気にしません。