DROP TABLE IF EXISTS `RESERVATION`;
CREATE TABLE IF NOT EXISTS `RESERVATION` (
  `ID_R` int(8) NOT NULL default '0',
  `ID_B` varchar(32) collate utf8_bin NOT NULL default '',
  `DATE_ENT` date NOT NULL default '0000-00-00',
  `DATE_SOR` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`ID_R`),
  KEY `FK_BUREAUX` (`ID_B`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;INSERT INTO `RESERVATION` (`ID_R`, `ID_B`, `DATE_ENT`, `DATE_SOR`) VALUES
(1, 1, '2009-05-01', '2009-08-30'),
(2, 1, '2012-09-01', '2015-04-03'),
(3, 2, '2004-09-01', '2012-08-31'),
(4, 3, '2007-01-31', '2012-08-31'),
(5, 3, '2012-05-30', '2012-08-31'),
(6, 4, '2009-08-30', '2012-05-30'),
(7, 5,'2009-01-31', '2010-08-30'),
....
.....预定办公室 
假如一个人 需要预定 2010-09-01 ~ 2013-08-31 , 这个时间段的空闲办公室
寻求sql搜索办法  可以得到 :可能是方案1: 办公室5 在 2010-09-01 ~ 2013-08-31 空闲
可能是方案2: 办公室1 在 2010-09-01 ~ 2012-08-31 空闲; 办公室2 在 2012-09-01 ~ 2013-08-31
可能是方案3: 办公室1 在 2010-09-01 ~ 2012-08-31 空闲; 办公室3 在 2012-09-01 ~ 2012-06-01; 办公室4 在 2012-06-01 ~ 2013-08-31请问有可能ma??xiexie dajia!!!

解决方案 »

  1.   

     这个很少用SQL语句来实现,一般是用程序来实现。
    如果是你的最大分开的时间段有限制,倒还可以使用SQL语句。
      

  2.   


    mysql> select * from RESERVATION;
    +------+------+------------+------------+
    | ID_R | ID_B | DATE_ENT   | DATE_SOR   |
    +------+------+------------+------------+
    |    1 | 1    | 2009-05-01 | 2009-08-30 |
    |    2 | 1    | 2012-09-01 | 2015-04-03 |
    |    3 | 2    | 2004-09-01 | 2012-08-31 |
    |    4 | 3    | 2007-01-31 | 2012-08-31 |
    |    5 | 3    | 2012-05-30 | 2012-08-31 |
    |    6 | 4    | 2009-08-30 | 2012-05-30 |
    |    7 | 5    | 2009-01-31 | 2010-08-30 |
    +------+------+------------+------------+
    7 rows in set (0.03 sec)mysql> set @startdate='2010-09-01';
    Query OK, 0 rows affected (0.00 sec)mysql> set @enddate='2013-08-31';
    Query OK, 0 rows affected (0.00 sec)mysql>
    mysql> select ID_B
        -> from RESERVATION r
        -> where not exists (
        ->  select 1
        ->  from RESERVATION
        ->  where ID_B=r.ID_B
        ->  and @startdate<=DATE_SOR
        ->  and @enddate>=DATE_ENT
        -> );
    +------+
    | ID_B |
    +------+
    | 5    |
    +------+
    1 row in set (0.00 sec)mysql>
      

  3.   


    i aready know 方案1... but the other...
    thank you all the same..