2012-09-23 20 views
1

我正在做一些調度程序的工作。其中一項功能是將電視節目插入調度器。在服務器端,這通過發送具有所請求的開始時間的節目標識符,即'在17-09-2012的10:49將插入節目標識符123插入到日程表中'來工作。但節目必須插入到塊中,即從晚上10點到12點的文化節目。所以插入之前,我們需要檢查一個塊存在,這片SQL的mysql檢查其他時間之間的時間

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 ; 

表只使用VARCHAR處理,而不是建立在日期時間類型,我想這就是我們所需要的改變,但不知道如何/在哪裏?任何幫助不勝感激。

回答

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; 
相關問題