我需要一种将持续时间存储在 db 字段中的方法。我正在建立一个网站,客户应该能够选择他们希望广告从特定开始日期显示多长时间。
我曾考虑过使用 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)
选择 TIME_TO_SEC(timediff(now(),start_time)) 作为 'time_difference_in_seconds_since_advert_started' FROM adverts
;
如果您只想获取未过期的广告,您将运行这样的查询;
SELECT * FROM `adverts` WHERE TIME_TO_SEC(timediff(now(),start_time))<=`duration_seconds`;
如果我要使用“持续时间”字段,那是我会这样做的一种方式。
是的,您可以将时间存储为 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)。
不是最好的解决方案,但您可以在数据库中添加一列,并检查时间何时超过 24 小时,将其计算为 1 天并写入该列,所有休息时间写入时间列。但是从 db 中选择,您还应该计算该列的天数