我正在做一些调度程序。其中一个功能是将电视节目插入调度程序。在服务器端,这通过发送具有所请求的开始时间的程序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而不是内置日期时间类型,我猜那是我们需要改变的,但不确定如何/在哪里?非常感谢任何帮助。
答案 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;