私はスケジューラプログラムでいくつかの作業を行っています。機能の 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 を使用しているだけです。それを変更する必要があると思いますが、どのように/どこで変更する必要があるかわかりません。どんな助けでも大歓迎です。