私はこれに数日間取り組んできましたが、理解できません。あなたが私を助けてくれることを願っています。
予約制に取り組んでいますが、日時にテーブルが空いているか確認したいのですが。これが私のデータベースの様子です。
利用可能なテーブルを選択ドロップダウンメニューに入れたいので、Webサイトでは利用可能なテーブルのみが表示されます。
次のクエリを使用すると、予約テーブルを取得できます
SELECT res.reserveringsnr, datum, begintijd, eindtijd, tafr.tafelnr FROM reserveringen AS res
INNER JOIN tafels_regel AS tafr
ON res.reserveringsnr = tafr.reserveringsnr
WHERE (res.datum = "2013/12/18" AND (res.begintijd BETWEEN "12:00:00" and "14:00:00"))
そのため、そのクエリは予約テーブルを出力しますが、ここで行き詰まります。特定のテーブルがDATEとTIMEに予約されているかどうかを確認する方法がわかりません。
(注:日付と時刻は変数で入力されますが、この例ではテキストのみを使用しました)
編集:@sebt彼のソリューションに取り組んでいます
まず第一に、あなたの質問に答えるために
- 予約は常に同じ日になります
- 予約の時間は決まっており、常に2時間です。
私はsebtのクエリを私の値に編集しました:
SELECT t.* FROM
tafels t
LEFT JOIN
(SELECT tafelnr FROM
tafels_regel tf
INNER JOIN
reserveringen res
ON tf.reserveringsnr=res.reserveringsnr
WHERE
res.datum="2012/01/12" AND
res.begintijd<"19:00:00" AND
res.eindtijd>"21:00:00"
)
ReservationsAtThisTime
ON t.tafelnr=ReservationsAtThisTime.tafelnr
WHERE ReservationsAtThisTime.tafelnr IS NULL
このクエリ出力は次の結果です
ご覧のとおり、クエリ結果にはすべてのテーブルが表示されます(12)。
また、reserveringen、tafels_regel、およびtafelsテーブルを.csvにエクスポートしました(以下の編集済み.csvを参照)。
編集2:
クエリをもう一度編集しました。一部で機能します。これはクエリです(スクリーンショット)
SELECT t.* FROM
tafels t
LEFT JOIN
(SELECT tafelnr FROM
tafels_regel tf
INNER JOIN
reserveringen res
ON tf.reserveringsnr=res.reserveringsnr
WHERE
res.datum="2013/01/12" AND
res.begintijd <= "19:00:00" AND
res.eindtijd >= "21:00:00"
)
ReservationsAtThisTime
ON t.tafelnr=ReservationsAtThisTime.tafelnr
WHERE ReservationsAtThisTime.tafelnr IS NULL
2013/01/12には2件の予約があります。(編集済みの.csvをダウンロード)
予約1:タフェル1で19:00から21:00まで
予約2:tafel11とtafel12の20:00から22:00まで
上記のクエリを実行すると、tafel1は19:00から21:00まで予約されているため、表示されていないtafelはtafel1だけです。ただし、20:00から22:00まではtafel11と12も予約されています。
クエリ結果からわかるように、tafel1のみが予約されています。しかし、19:00から21:00まで別の予約を行い、利用可能なタフェルをチェックしていると、タフェル11とタフェル12が引き続き表示されます。
タフェルは19:00に無料になりますが、私たちはいつも2時間座っているので、そこに座ることはできません。
ご入力いただきありがとうございます@sebt、このクエリでさらに私を助けてくれることを願っています!
問題が解決しました
すべての助けをありがとう、これは最後のクエリです
SELECT t.* FROM
tafels t
LEFT JOIN
(SELECT tafelnr FROM
tafels_regel tf
INNER JOIN
reserveringen res
ON tf.reserveringsnr=res.reserveringsnr
WHERE
res.datum="2013/01/12" AND
res.eindtijd > "19:00:00" AND
res.begintijd < "21:00:00"
)
ReservationsAtThisTime
ON t.tafelnr=ReservationsAtThisTime.tafelnr
WHERE ReservationsAtThisTime.tafelnr IS NULL