2014-04-14 93 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。 「整體」錯字。 –