mysql检查其他时间之间的时间

时间:2012-09-23 11:29:03

标签: mysql sql

我正在做一些调度程序。其中一个功能是将电视节目插入调度程序。在服务器端,这通过发送具有所请求的开始时间的程序id来工作,即“将程序ID 123插入到17-09-2012的10:49的时间表中”。但这些节目必须插入街区,即晚上10点到12点的文化节目。所以在插入之前我们需要检查一个块是否存在,使用这段sql

SELECT t1.schedblockid, t1.blockname,
  t1.blockstart, t1.blockend, t2.scheduledate
FROM scheduleblocks t1, schedule t2
WHERE t1.schedblockid = t2.scheduleblock 
  AND t2.scheduledate = '$_GET[scheddate]'
AND '$_GET[schedtime]' >= blockstart 
AND '$_GET[schedtime]' <= blockend

它的简单和有效,在上面的示例中,它检查17-09-2012的计划中是否存在块,其中10.49可以适合。我们现在遇到的问题是我们正在尝试引入交叉日块,例如从晚上11点到凌晨2点。但是使用上面的sql代码,例如,当搜索时间23:51时,它不会找到23:00-02:00的插槽。

继承了表格定义。

CREATE TABLE IF NOT EXISTS `schedule` (
  `scheduleid` int(11) NOT NULL AUTO_INCREMENT,
  `scheduledate` varchar(20) NOT NULL,
  `scheduleblock` int(11) NOT NULL,
  PRIMARY KEY (`scheduleid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ;


CREATE TABLE IF NOT EXISTS `scheduleblocks` (
  `schedblockid` int(11) NOT NULL AUTO_INCREMENT,
  `blockname` varchar(100) NOT NULL,
  `blockstart` varchar(10) NOT NULL,
  `blockend` varchar(10) NOT NULL,
  `linked` int(11) NOT NULL,
  PRIMARY KEY (`schedblockid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=44 ;

这些表只使用varchars而不是内置日期时间类型,我猜那是我们需要改变的,但不确定如何/在哪里?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

将表格结构更改为:

CREATE TABLE IF NOT EXISTS `schedule` (
  `scheduleid` int(11) NOT NULL AUTO_INCREMENT,
  `scheduledate` DATE NOT NULL,
  `scheduleblock` TIME NOT NULL,
  PRIMARY KEY (`scheduleid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ;


CREATE TABLE IF NOT EXISTS `scheduleblocks` (
  `schedblockid` int(11) NOT NULL AUTO_INCREMENT,
  `blockname` varchar(100) NOT NULL,
  `blockstart` TIME NOT NULL,
  `blockend` TIME NOT NULL,
  `linked` int(11) NOT NULL,
  PRIMARY KEY (`schedblockid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=44 ;

如果你不是从头开始,你需要ALTER你的桌子:

ALTER TABLE schedule CHANGE COLUMN `scheduledate` `scheduledate` DATE NOT NULL;
ALTER TABLE schedule CHANGE COLUMN `scheduleblock` `scheduleblock` TIME NOT NULL;
ALTER TABLE scheduleblocks CHANGE COLUMN `blockstart` `blockstart` TIME NOT NULL;
ALTER TABLE scheduleblocks CHANGE COLUMN `blockend` `blockend` TIME NOT NULL;