2012-07-27 40 views
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 

我希望所有的學生記錄中在指定的日期範圍內有出勤總人數,但它只顯示那些有出勤率的學生的兩個記錄。 但是 如果我們刪除日期檢查條件它工作正常。正確加入不起作用

在此先感謝

回答

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') 
+0

遺憾地說,但這不能正常工作,仍顯示出只參加學生(?: – 2012-07-27 08:39:54

+0

您可以發佈更新的查詢在你原來的問題 – 2012-07-27 08:44:10

+0

SELECT Student.id,學生(出勤)''''''作爲總數從'karate'.'students'作爲'學生'RIGHT JOIN'karate'.'attendances'作爲'考勤'ON('考勤'。 'student_id' ='Student'.'id')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')GROUP BY'Student'.'id' ORDER BY total ASC – 2012-07-27 08:46:42