我有一个包含id_user
,to_sent
和sent_datetime
列的表格,可以是有效的DATETIME
或NULL
。它基本上存储了是否发送了什么。
我每24小时只能发送5个,所以在该查询中我需要知道哪个id_user
有 to_sent = 1 并且在过去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 :(得分:2)
有两件事需要检查:
确保处理sent_datetime
为空的情况,否则TIMESTAMPDIFF
将返回NULL
。我不确定这是一个问题。
确保TIMESTAMPDIFF
返回的值不是负数。如果是,请在表达式中反转NOW()
和sent_datetime
。
尝试在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小时而不是日历中的一天。