質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

5449閲覧

SQLで、予約のダブルブッキングの有無を検出したい。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

3クリップ

投稿2015/08/31 07:43

MySQLをJavaで、使っています。

予約テーブルの中で、
これから登録しようとしている新規予約が、
既存予約と日付と開始時間、終了時間、会議室番号 との ダブルブッキングをしているか?
の有無を抽出したいのですが、SQL文がわかりません。

テーブル例
id 会社番号 予約日 開始時間 終了時間 会議室番号
1 1 2015-10-10 10:00 11:00 1
2 1 2015-11-21 15:00 17:45 2
3 2 2015-10-10 10:00 11:00 2
4 2 2014-03-11 12:00 12:15 1
5 3 2015-10-11 10:00 11:00 3
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ここは、複合キーでユニーク

上記データあった場合、
SQLへ渡す変数(関数の引数)は、
これから登録しようとしている新規予約データの変数、
会社番号、 予約日、開始時間、終了時間、会議室番号
の5つあります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

  • 日付と会議室番号が同じ
  • 新規.開始時間 が 登録済.終了時間 よりも小さい
  • 新規.終了時間 が 登録済.開始時間 よりも大きい

が重複しているレコードなので、次のような感じでしょうか。

sql

1select * from 予約テーブル 2where 予約日 = :予約日 3 and 会議室番号 = :会議室番号 4 and 終了時間 > :開始時間 5 and 開始時間 < :終了時間

投稿2015/08/31 08:08

編集2015/08/31 08:29
ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/09/01 00:59

SQLのご提供ありがとうございます。お手数をお掛けしました。 早速、プログラムに組み込みます。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2015/09/01 09:45

重複のありえない時間帯を指定しても、常に重複あり(=ダブルブッキング)の判定です。 今、原因調査中です。
退会済みユーザー

退会済みユーザー

2015/09/02 04:12

ご報告: 改めて、SQLのご提供ありがとうございます。しかも、関係で早く処理ができるSQLで感謝しております。 無事にプログラムに組み込み、各パターンのテストを行いましたが、問題なく、予約重複を抽出でき、ダブルブッキングの判定ができました。 本当にたすかりました。ありがとうございました。 お手数をおかけしました。
guest

0

SQL

1SELECT 2 id 3FROM 4 テーブル例 5WHERE 6 予約日 = "入力された予約日" 7AND 8 会議室番号 = "入力された会議室番号" 9AND 10 開始時間 > 終了 11AND 12 終了時間 < "入力された開始時間" 13 LIMIT 1

腐ってたので修正

投稿2015/08/31 08:03

編集2015/09/02 01:33
nanndemoiikara

総合スコア775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuba

2015/08/31 08:40

判定条件が間違っています。入力した開始/終了時間に「取り囲まれている」予約がこれだと引っかかりません。入力した開始/終了時間を「取り囲んでいる」予約もですね。 するとOR節をもっと増やさないといけないのかと言いますと、むしろもっと単純化できます。ngyukiさんの判定条件がたった2行ながら必要十分となっています。
退会済みユーザー

退会済みユーザー

2015/09/01 00:58

namdemoiikaraさん、SQLのご提供、ありがとうございます。お手数をおかけしました。 yubaさん、フォローの書き込みありがとうございます。大変たすかるフォローの書き込みです。お手数をお掛けしました。助かりました。ありがとうございます。
nanndemoiikara

2015/09/02 01:31

> 判定条件が間違っています。入力した開始/終了時間に「取り囲まれている」予約がこれだと引っかかりません。入力した開始/終了時間を「取り囲んでいる」予約もですね。 > するとOR節をもっと増やさないといけないのかと言いますと、むしろもっと単純化できます。ngyukiさんの判定条件がたった2行ながら必要十分となっています。 その通りだと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問