我想简单地上学/出勤,想法是老师应该每天确定学生的出勤状态。
我有2个桌子,学生和状态
这是学生桌
这是在线状态表
现在我想在我的网站上创建一个界面,该界面按班级名称和日期显示所有学生。
如果所有上课日期和当前日期的学生都没有在场状态,则显示所有在场状态为“尚未决定”的学生
如果某个班级和当前日期的学生没有在场状态,则它将为已经设置在场状态的学生显示学生在场状态A / I / S,而另一名学生的状态为“尚未决定” >
这是我的查询
SELECT `a`.`student_id`, `a`.`student_name`, `b`.`presence_id`, `b`.`presence_status`, `b`.`date_presence`
FROM `student` `a`
left JOIN `presence` `b` ON `a`.`student_id` = `b`.`student_id`
WHERE `a`.`class_name` = 'KLJ0009' and `b`.`date_presence` = '2018-07-24'
这是结果
它仅显示3个人,我想要显示的是所有学生,其class_name为KLJ0009,如果该学生没有presentation_status,则只需将present_id,presence_status和date_presence显示为空
我该怎么做?
谢谢。
答案 0 :(得分:2)
您需要将以下条件移至查询的ON
部分:
`b`.`date_presence` = '2018-07-24'
因此您的查询如下所示:
SELECT `a`.`student_id`, `a`.`student_name`, `b`.`presence_id`, `b`.`presence_status`, `b`.`date_presence`
FROM `student` `a` LEFT JOIN `presence` `b` ON `a`.`student_id` = `b`.`student_id` AND `b`.`date_presence` = '2018-07-24'
WHERE `a`.`class_name` = 'KLJ0009'
注意::如果您想始终查询当前日期,可以使用NOW
或CURDATE
而不是2018-07-24
。
答案 1 :(得分:0)
您需要当前日期,因此请使用now()函数和case when
作为状态
SELECT `a`.`student_id`, `a`.`student_name`, `b`.`presence_id`,
case when `b`.`presence_status` is not null then `b`.`presence_status` else 'Yet not Decided' as presence_status, `b`.`date_presence` FROM `student`
`a` left JOIN `presence` `b`
ON `a`.`student_id` = `b`.`student_id`
and `b`.`date_presence` = date(now())
WHERE `a`.`class_name` = 'KLJ0009'