0

id_user列のあるテーブルがto_sentあり、sent_datetimeそれは有効DATETIMEまたはである可能性がありますNULL。基本的に、何かが送信されたかどうかを保存します。

私は24時間ごとに5つしか送信できないので、そのクエリでは、 to_sent = 1があり、過去24時間に何も送信していないid_userものを知る必要があります。そのto_sent=1もおそらくsent_datetime=NULLになりますが、それを処理する方法がわかりません。

送信は後で行われ、個別のid_userのみがOKになります。

私はもう試した

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時間以上経過しているものだけを取得するわけではありません。

4

1 に答える 1

2

2 つの確認事項があります。

  1. sent_datetimeが nullの場合を処理するようにしてください。それ以外の場合TIMESTAMPDIFFは が返されるためNULLです。これがここで問題になるかどうかはわかりません。

  2. によって返される値TIMESTAMPDIFFが負でないことを確認してください。NOW()その場合は、式のandを反転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;

さらに、これにより精度が 1 日に変わります。次のように変更したい場合があります:TIMESTAMPDIFF(HOUR, sent_datetime, NOW()) >= 24または分、またはその他。これは、カレンダーの 1 日ではなく、正確に 24 時間が必要な場合です。

于 2012-05-15T15:22:38.047 に答える