2012-10-28 114 views
1

我想顯示可捐獻獻血者的捐贈者名單。爲此,我計算他們的最後捐贈日期是否在90天之前。這裏是我的查詢:顯示90天前的所有記錄

select * 
from donar, donation 
    donar.id=donation.donar_id 
    and sex='female' 
    and datediff(curdate(),donation_date) > 120 

問題是,它完美地顯示捐贈者的名字,但如果供體血了,現在它仍然顯示在列表中他的名字怎麼一回事,因爲他有前90天之前的條目。我該如何解決這個問題?

+0

什麼是「donation_date」字段類型? – 2012-10-28 22:00:33

+0

不在於它真的很重要,但你可能是指「供體」,而不是「Donar超級」。 – doublesharp

+0

字段類型日期 – dxenaretionx

回答

3

你錯過了你的例子中的一個地方。給這個鏡頭......你需要從另一個角度來看待查詢...根據你的評論,下面是一個簡單的方法來獲得男女不同的日期限制。你也許可以在沒有UNION的情況下做到這一點,但我認爲這個聯盟保留了男性和女性不同日子的邏輯。

SELECT * from donor 
    LEFT JOIN donation ON donor.id=donation.donor_id 
     AND donation.donation_date > NOW() - INTERVAL 120 day 
WHERE donation.donation_id IS NULL 
     AND donor.sex='female' 

UNION 

SELECT * from donor 
    LEFT JOIN donation ON donor.id=donation.donor_id 
     AND donation.donation_date > NOW() - INTERVAL 90 day 
WHERE donation.donation_id IS NULL 
     AND donor.sex='male' 

基本上這個查詢表示「給我在Donar已表中的所有的人,包括那些捐贈withing90天信息,然後只顯示那些沒有捐款的詳細信息(誰沒有在90天內捐贈AKA人)。

+0

其實我從移動寫道手所以我錯過了一些詞,查詢是完美的問題,即使她在120天后有新的捐贈,它也會顯示donar,米試圖你一個... – dxenaretionx

+0

@dxenaretionx我以爲你想捐助者名單上誰沒有在90天內捐贈的任何人。是90還是120?我假設捐助人表中的所有人都捐獻了至少一次。如果不需要一些編輯。 – Ray

+0

@dxenaretionx「錯過了一些單詞」很抱歉,但您如何期待我們能夠幫助您,請等到您發佈之前從真正的鍵盤上下載。 – 2012-10-28 22:16:40

0
select * from donar 
     left join donation 
       on (donar.id=donation.donar_id) 
     where (
       (sex='female' and datediff(curdate(),donation_date) > 120) 
       or 
       (sex='male' and datediff(curdate(),donation_date) > 90) 
      ) 
      or donation.id is null;