2012-05-15 11 views
0

我有一個表id_user,to_sentsent_datetime可以是有效的DATETIMENULL。它基本上存儲如果有東西已經發送或沒有。選擇timestampdiff超過1天,並有一些空

我只能在查詢我需要知道哪些id_user有事to_sent = 1並沒有在過去24小時內發送任何送5爲每24小時,使。那to_sent = 1也可能有一個sent_datetime = NULL但我不知道如何處理它。

發送將在稍後進行,只有不同的id_user纔可以。

我已經試過

SELECT id_user 
FROM send 
WHERE 
    to_sent=1 
    AND (TIMESTAMPDIFF(DAY, sent_datetime, NOW()) < 1) 
GROUP BY id_user 
ORDER BY updated_datetime; 

但我不明白只有那些從去年發送的東西超過24小時的人。

+0

嘗試在id_user之前添加DISTINCT並刪除GROUP BY。還要將updated_datetime添加到SELECT中(或者先用SELECT *嘗試) – CosminO

回答

1

有兩件事情來檢查:

  1. 確保您處理的情況下sent_datetime爲空,否則TIMESTAMPDIFF將返回NULL。我不確定這是否是一個問題。

  2. 確保TIMESTAMPDIFF返回的值不是負值。如果是這樣,則在表達式中反轉NOW()sent_datetime

  3. 嘗試在您的select語句中添加此表達式,以便您可以看到結果。

所以,你可以試試這個:

SELECT id_user, TIMESTAMPDIFF(DAY, sent_datetime, NOW()) 
FROM send 
WHERE 
    to_sent=1 
    AND (TIMESTAMPDIFF(DAY, sent_datetime, NOW()) < 1) 
    AND sent_datetime IS NOT NULL 
GROUP BY id_user 
ORDER BY updated_datetime; 

最後,你需要這樣的:

SELECT id_user 
FROM send 
WHERE 
    to_sent=1 
    AND (TIMESTAMPDIFF(DAY, sent_datetime, NOW()) >= 1 
     OR sent_datetime IS NULL) 
GROUP BY id_user 
ORDER BY updated_datetime; 

另外,這使得在差一天的準確性。您可能需要將其更改爲:TIMESTAMPDIFF(HOUR, sent_datetime, NOW()) >= 24或分鐘或其他。那就是如果你想要24小時而不是日曆中的一天。

+0

Hello!這給了我兩個不同的結果0.問題是這個ID已經發送了最後的24小時。我不需要,我需要超過24小時。先謝謝你!如果我更改< to >我得到0結果,因爲sent_datetime可能是NULL。 – udexter

+0

然後使用,而不是'<1' use '> 1' – jadkik94

+0

如果我只使用WHERE to_sent = 1,我有3個ID(這是正確的),兩個用0和一個用NULL。最後是我需要發送的地方。 – udexter