毎日送信するメールの表があります。したがって、時刻を時間フィールド(00:00:00、日付なし)として保存しています。行の例は次のとおりです。
mike, timeOfDay = 07:03 meaning "send mike an email daily at 7:03AM"
corey, timeOfDay = 23:30 meaning "send corey an email daily at 11:30PM"
いつでも、過去1時間に送信するメールを見つけたいと思います。たとえば、これを午前7:55に実行すると、午前6:55から午前7:55までのすべてのレコードが取得されます。これにはマイクのメールが含まれます。スクリプトが12:15AM(00:15)に実行される場合、11:15PM(23:15)から12:15 AM(00:15)の間にすべてのレコードを取得する必要があります。これには、coreyのメールが含まれます。
私はSOとWebですべての 例を見てきましたが、それらはすべて時間に加えて日付を必要としているようです。
私が来ることができる限り近く:
SELECT
`notification`. *,
now() as now,
DATE_SUB( NOW( ) , INTERVAL 1 HOUR ) as 1hourAgo
FROM `notification`
WHERE (
`notification`.`timeofday` > DATE_SUB( NOW( ) , INTERVAL 1 HOUR )
)
AND (
`notification`.`timeofday` < NOW( )
)
私はこの時間と最後の時間に一致するハックを今までに考え出しましたが、それはまあ、ハックっぽいようです。これを行う正しい方法が必要です!
これが私が持っているハックです。
SELECT
`notification`. * ,
HOUR( NOW( ) ) AS HOUR ,
HOUR( DATE_SUB( NOW( ) ,
INTERVAL 1 HOUR ) ) AS 1hourago,
time( now( ) ) AS now
FROM `notification`
WHERE (
HOUR( `notification`.`timeofday` ) = HOUR( NOW( ) )
OR HOUR( `notification`.`timeofday` ) = HOUR( DATE_SUB( NOW( ) , INTERVAL 1 HOUR ) )
)
AND (
`notification`.`timeofday` < TIME( NOW( ) )
)
ご協力いただきありがとうございます!