我正在做一些调度程序的工作。其中一项功能是将电视节目插入调度程序。在服务器端,这通过发送带有请求的开始时间的程序 id 来工作,即“在 2012 年 9 月 17 日 10:49 将程序 id 123 插入日程表”。但是节目必须插入到块中,即从晚上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
它简单且有效,在上面的示例中,它检查 2012 年 9 月 17 日的时间表中是否存在一个块,其中 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 而不是内置的日期时间类型,我想这就是我们需要更改的内容,但不确定如何/在哪里?非常感谢任何帮助。