2014-04-14 89 views
1

我正在一个项目中加载一个学生名单,这取决于选择的日期和从下拉列表中选择的老师。该列表包含那些班主任是老师选择的学生数据。现在,我使用下面的查询:mysql中可选的where子句条件

select s.studentcode,s.studentname,a.attdate,if(a.period='01' or 
a.period='AM',a.status,'') as attAM,if(a.period='PM',a.status,'') as attPM 
from tblstudent s left join tblattendance a on s.studentcode=a.studentcode 
where s.classcode='10002' and a.attdate='2014-04-11' 

现在,上述问题是查询的是,如果我选择了出勤没有标记这个日期一些类似日期2014年4月15日,然后再没有找到记录,但我想,学生列表始终显示,如果出勤率被标记为它应该显示相应否则该日期

enter image description here

上面的截图显示的是这是我想要的列表中的那些字段将是空白。现在,如果该日期的考勤没有标记,并且该标记已标记,那么现场AM应该是空白的LD包含相应的考勤

回答

1

移动你的AND a.attdate = '2014-04-11'加入的ON()子句,所以如果日期不存在,它仍然返回s.classcode = '10002'a.attdate列的记录将在结果集,其中过滤器被应用到整个结果集了空在加入会过滤从右表中的记录,即tblattendance不是整个结果集

SELECT 
    s.studentcode, 
    s.studentname, 
    a.attdate, 
    IF(
    a.period = '01' 
    OR a.period = 'AM', 
    a.status, 
    '' 
) AS attAM, 
    IF(a.period = 'PM', a.status, '') AS attPM 
FROM 
    tblstudent s 
    LEFT JOIN tblattendance a 
    ON (s.studentcode = a.studentcode AND a.attdate = '2014-04-11') 
WHERE s.classcode = '10002' 
+0

嗯使用附加条件,它的工作谢谢:)。请告诉我一两件事,这意味着连接可以根据这个来完成类型的条件,而不是加入公共领域 – rupinder18

+0

@ rupinder18加入应该首先根据prima ry键和外键,那么如果你仍然想要你的条件不满足的结果,你可以把它放在on子句中也可以看到我的更新回答 –

+1

@MKhalidJunaid:Errr。 “整体”错字。 –