代码之家  ›  专栏  ›  技术社区  ›  Pierre de LESPINAY

计划管理时段/会议

  •  0
  • Pierre de LESPINAY  · 技术社区  · 16 年前

    我在两张桌子上有一个计划结构,可以按天存储可用的时段和会话。

    时隙由一天中的时间范围定义。

    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 回复  |  直到 10 年前
        1
  •  0
  •   MaxGuernseyIII    16 年前

    我认为如果你用算法而不是用查询来处理这个问题的话,你的生活会简单得多。这可能是使用存储过程,这可能意味着在中间层编写算法。

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

    数据库用于保存知识,而不是承载业务逻辑。