0
SELECT
  Student.id,
  Student.first_name,
  Student.last_name, 
  count(`Attendance`.`id`) as total 
FROM `karate`.`attendances` AS `Attendance` 
RIGHT JOIN `karate`.`students` AS `Student` ON (`Attendance`.`student_id` = `Student`.`id`)
WHERE 1
  AND `Attendance`.`attendance_date` BETWEEN '2012-07-01' AND '2012-07-31' 
  AND (Student.active = '1') 
  AND (Student.type = 'student') 
GROUP BY `Student`.`id` 
ORDER BY total ASC

指定された日付範囲内の合計出席数を持つすべての学生のレコードが必要ですが、出席している学生のレコードが 2 つしか表示されません。しかし、日付チェック条件を削除すると、正常に機能します。

前もって感謝します

4

1 に答える 1

0

これattendance_dateは、右結合された行の値が NULL であるためです。このケースを条件に含める必要があります。

WHERE 1
  AND (`Attendance`.`attendance_date` IS NULL
         OR `Attendance`.`attendance_date` BETWEEN '2012-07-01' AND '2012-07-31')
  AND (Student.active = '1') 
  AND (Student.type = 'student')
于 2012-07-27T08:26:51.487 に答える