1

私はスケジューラプログラムでいくつかの作業を行っています。機能の 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 に答える