我將行用戶存儲在我的數據庫中作爲行。我允許用戶輸入他們的時區,並將其存儲在數據庫中。php/mysql正確的方式來查詢時區敏感的行
我的應用程序會在他們指定的時間每天給他們發電子郵件。我將電子郵件交付作爲一行存儲在另一個數據庫表中。這將通過一個cron工作來實現。
我希望我的查詢能夠提取用戶記錄,其中該用戶的最新電子郵件至少1400分鐘(24小時前),並根據他們的時區通過指定的時間。
我有以下查詢,但我不知道如何解釋MySQL的時區和用戶的時區。有什麼建議麼?
SELECT u.id, u.email, u.timezone_offset, u.email_time, TIMESTAMPDIFF(
MINUTE , CONCAT(DATE(MAX(e.created)) , ' ', u.email_time) , NOW()) AS min_since_last_email
FROM Users u
INNER JOIN Emails e ON e.user_id = u.id
WHERE min_since_last_email > 1400
GROUP BY u.id
時區偏移量是從GMT的偏移量..所以它會像我這樣的「-5」。
我可能會建議擺脫'min_since_last_email'並將其作爲時區偏移。然後只需查詢當時需要發送的所有內容。舉個例子,假設每個人都在下午2點出發。因此,在格林尼治標準時間下午4點(2pm + 2小時)查詢'WHERE tz = -2'並將電子郵件僅發送給這些用戶。 – Mike
嗯,我想最終允許他們指定每天,每兩天,每三天的時間間隔等。 – David
在這種情況下,您可以將'last_email_sent'作爲'DATE'和'email_every'作爲'INT'並且做'WHERE tz = -1 * timezone_offset AND DATEDIFF(NOW(),last_email_sent)> = email_every'。我認爲應該有效。我真的不喜歡在日期/時間裏使用'INT'。 – Mike