规划管理槽/会话

时间:2010-03-30 19:41:44

标签: mysql calendar

我在两个表上有一个计划结构,用于按日存储可用的插槽和会话。

广告位由当天的时间范围定义。

CREATE TABLE slot (
  `id` int(11) NOT NULL AUTO_INCREMENT
, `date` date
, `start` time
, `end` time
);

会话不能重叠,必须包含在插槽中。

CREATE TABLE session (
  `id` int(11) NOT NULL AUTO_INCREMENT
, `date` date
, `start` time
, `end` time
);

我需要生成一段特定时间段的可用时间段列表,以便创建会话。

示例:

INSERT INTO slot
  (date, start, end)
VALUES
  ("2010-01-01", "10:00", "19:00")
, ("2010-01-02", "10:00", "15:00")
, ("2010-01-02", "16:00", "20:30")
;

INSERT INTO slot
  (date, start, end)
VALUES
  ("2010-01-01", "10:00", "19:00")
, ("2010-01-02", "10:00", "15:00")
, ("2010-01-02", "16:00", "20:30")
;

2010-01-01

   <##><####>                               <- Sessions
 ------------------------------------       <- Slots
10  11  12  13  14  15  16  17  18  19  20

2010-01-02

         <##########>          <########>   <- Sessions
 --------------------    ------------------ <- Slots
10  11  12  13  14  15  16  17  18  19  20

我需要知道我可以使用1小时的空间:

+------------+-------+-------+
| date       | start | end   |
+------------+-------+-------+
| 2010-01-01 | 13:00 | 14:00 |
| 2010-01-01 | 14:00 | 15:00 |
| 2010-01-01 | 15:00 | 16:00 |
| 2010-01-01 | 16:00 | 17:00 |
| 2010-01-01 | 17:00 | 18:00 |
| 2010-01-01 | 18:00 | 19:00 |
| 2010-01-02 | 10:00 | 11:00 |
| 2010-01-02 | 11:00 | 12:00 |
| 2010-01-02 | 16:00 | 17:00 |
+------------+-------+-------+

1 个答案:

答案 0 :(得分:0)

如果您使用算法而不是使用查询,我认为您的生活将变得更加轻松。这可能是使用sproc,这可能意味着在中间层编写算法。

我的建议是在中间层进行。使数据库负责存储插槽和会话,并将计算留给更适合该任务的计算。

数据库用于保持知识,而不是托管业务逻辑。