1

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

4

1 回答 1

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;
于 2012-09-23T13:35:30.090 回答