14

我需要一种将持续时间存储在 db 字段中的方法。我正在建立一个网站,客户应该能够选择他们希望广告从特定开始日期显示多长时间。

我曾考虑过使用 TIME,但它的最大值为“838:59:59”,大约需要 34 天。客户可能希望广告存在的时间更长。

那么处理这个问题的最佳方法是什么?只是一个非常大的INT?

4

3 回答 3

14

如果您打算有一个用于开始时间的列和一个用于持续时间的列,我认为您可以在几秒钟内存储它。所以,我假设你会有这样的东西;

+-----------+--------------------------+------------------+
| advert_id | start_time               | duration_seconds |
+-----------+--------------------------+------------------+
| 2342342   |'2012-11-12 10:23:03'     | 86400            |
+-----------+--------------------------+------------------+

(为了举例,我们称这个表adverts

  1. advert_id - 指向您的广告的键
  2. start_time - 广告应该开始的时间(数据类型 - TIMESTAMP)
  3. 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`;

如果我要使用“持续时间”字段,那是我会这样做的一种方式。

于 2012-11-12T15:49:50.890 回答
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)。

于 2012-11-12T15:27:30.317 回答
0

不是最好的解决方案,但您可以在数据库中添加一列,并检查时间何时超过 24 小时,将其计算为 1 天并写入该列,所有休息时间写入时间列。但是从 db 中选择,您还应该计算该列的天数

于 2012-11-12T15:17:44.523 回答