2017-02-25 4 views
0

Exam Schedulingシステムを作成したいと思います。今、私の目的は、例えば、SQL Server 2008の で同じ部屋の競合タイムスケジュールを挿入するために、ユーザーを避けるためです:SQL Scheduling System

部屋ため

02/27/2017 4:00pm - 5:00pm 

のスケジュールがそう何場合があります部屋のためのユーザ入力は、明らかに

02/27/2017 3:50pm - 5:10pm 

競合がこれです。

私が明らかに間に使用しようとしているのであれば、与えられた入力例ではうまくいきません。

助けてください。 ありがとう

+1

それはちょうどあなたがチェックしているかに依存します。 4:00〜3:50と5:10。正しいデータ型を使用していることを確認してください。コード固有の質問がある場合は、試したコードと使用しているデータベースの種類(MySQLまたはSQL Serverなど)を投稿してください。 –

答えて

0

ニックと同様に、betweenは必要なものです。この場合、existsまたはnot existsと組み合わせて、スケジュールの競合を避けることができます。 insertは、新しい部屋(競合を示す)と新しい部屋の間の開始時刻または終了時刻が同じ日に、同じ部屋のスケジュールにエントリがない場合にのみ実行します。この例では

ルック:

SQL Fiddle

MS SQL Server 2008のスキーマのセットアップ

CREATE TABLE schedule 
    ([room] int, [date] date, [start] time, [finish] time) 
; 

INSERT INTO schedule 
    ([room], [date], [start], [finish]) 
SELECT 202, '2017-02-26', '16:00', '17:00' 
WHERE NOT EXISTS (SELECT * 
        FROM schedule 
        WHERE room = '202' AND date = '2017-02-26' AND 
        (start BETWEEN '16:00' AND '17:00' 
        OR finish BETWEEN '16:00' AND '17:00')) 
; 

INSERT INTO schedule 
    ([room], [date], [start], [finish]) 
SELECT 202, '2017-02-26', '15:50', '17:10' 
WHERE NOT EXISTS (SELECT * 
        FROM schedule 
        WHERE room = '202' AND date = '2017-02-26' AND 
        (start BETWEEN '15:50' AND '17:10' 
        OR finish BETWEEN '15:50' AND '17:10')) 
; 

INSERT INTO schedule 
    ([room], [date], [start], [finish]) 
SELECT 202, '2017-02-26', '15:00', '15:59' 
WHERE NOT EXISTS (SELECT * 
        FROM schedule 
        WHERE room = '202' AND date = '2017-02-26' AND 
        (start BETWEEN '15:00' AND '15:59' 
        OR finish BETWEEN '15:00' AND '15:59')) 
; 

クエリ1

SELECT * 
FROM schedule 

Results

アプリケーションで
| room |  date |   start |   finish | 
|------|------------|------------------|------------------| 
| 202 | 2017-02-26 | 16:00:00.0000000 | 17:00:00.0000000 | 
| 202 | 2017-02-26 | 15:00:00.0000000 | 15:59:00.0000000 | 

、それは次のようになります

疑似:_will_作業の間

SELECT count(*) 
FROM schedule 
WHERE room = '202' AND date = '2017-02-26' AND 
     (start BETWEEN '15:00' AND '15:59' 
     OR finish BETWEEN '15:00' AND '15:59') 

if count(*) = 0 then 
    INSERT INTO schedule 
     ([room], [date], [start], [finish]) 
    SELECT 202, '2017-02-26', '15:00', '15:59' 
else 
    ERROR "CONFLICT WITH ANOTHER SCHEDULE" 
end if