期間を db フィールドに格納する方法が必要です。特定の開始日から広告を表示する期間を顧客が選択できるようにする Web サイトを構築しています。
TIME を使用することを考えていましたが、最大で '838:59:59' になり、約 34 日になります。クライアントが広告をそれよりも長く存続させたいと考える可能性があります。
では、これに対処する最善の方法は何でしょうか? 本当に大きなINTだけですか?
開始時間と期間の列を作成する場合は、秒単位で保存できると思います。したがって、次のようなものがあると思います。
+-----------+--------------------------+------------------+
| advert_id | start_time | duration_seconds |
+-----------+--------------------------+------------------+
| 2342342 |'2012-11-12 10:23:03' | 86400 |
+-----------+--------------------------+------------------+
(例のために、このテーブルを と呼びますadverts
)
duration_seconds - 広告が「有効」になる秒数 (INTEGER(11)
SELECT TIME_TO_SEC(timediff(now(),start_time)) as 'time_difference_in_seconds_since_advert_started' FROM adverts
;
有効期限が切れていない広告のみを取得する場合は、次のようなクエリを実行します。
SELECT * FROM `adverts` WHERE TIME_TO_SEC(timediff(now(),start_time))<=`duration_seconds`;
「期間」フィールドを使用する場合、それは私が行う1つの方法です。
はい、時間を INT データ型 (または別の大きな整数: MEDIUMINT、LONGINT) として格納できます。次に、これから簡単に曜日と時間の部分を取得できるように使用します。
SELECT time DIV 86400 AS days, SEC_TO_TIME(column1 MOD 86400) AS time FROM table
86400 は 24 時間の秒数です (60 * 60 * 24 = 86400)。
最善の解決策ではありませんが、データベースに1つの列を追加し、時間が24時間以上であることを確認し、それを1日として計算してその列に書き込み、残りのすべての時間を時間列に書き込むことができます. しかし、データベースから選択すると、その日の列も計算する必要があります