0

私のmysqlデータベースで可用性を照会するのを誰かが手伝ってくれるかどうか疑問に思っていました.

すっごく、tbl_items(ユニット項目) と tbl_reservations の 2 つのテーブルがあります。

tbl_reservations
-barcode
-dateReserved
-timeStart
-timeEnd

tbl_items -バー コード
-itemName -itemDesc

私がやりたかったことは次のようなものです(画像を参照してください):
予約

これまでのところ、これは私のクエリです:

SELECT a.bcode, b.resdate, b.timestart, b.timeend
FROM tbl_items a
INNER JOIN tbl_reservations b
on a.bcode=b.bcode
WHERE a.bcode
not in
(
  Select bcode
  FROM tbl_reservations
  WHERE bcode not in
  (
  SELECT bcode
  FROM tbl_reservations
  where resdate='2013-09-25' AND retdate is null
  )
AND ((timestart < '10:00'AND timeend < '10:00')
AND (timestart > '15:00' AND timeend > '15:00'))
)

ただし、この長いコードを使用しても、すでに予約されているか、利用できないはずの機器が表示されます。

助けはありますか?

ありがとう!:D

結果セットに含まれないことを意味する予約を含む結果セットのスクリーンショット:
結果セット

強調表示されているものは、上記のコードの条件と重複するものです...

更新: これが新しいコードです... 10:00 より前に timestart と timeend の両方を持つ行が返されたので、私は驚きました。

select rsv.controlno, rsv.bcode, rsv.resdate, rsv.timestart, rsv.timeend
FROM
(
  select bcode
  from tbl_items
) i
inner join tbl_reservations rsv
on i.bcode=rsv.bcode
WHERE resdate='2013-09-25' AND NOT (rsv.timeend > '10:00' AND rsv.timestart < '15:00');
4

1 に答える 1

0

以下のコードを試してください。AND を OR に切り替えるとうまくいくと思います。外側の AND では、条件の 1 つが真である必要があります。期間内の OR は期間前、または期間外の予約を取得しますが、期間内は予約を取得しません。

SELECT a.bcode, b.resdate, b.timestart, b.timeend
FROM tbl_items a
INNER JOIN tbl_reservations b
on a.bcode=b.bcode
WHERE a.bcode
not in
(
  Select bcode
  FROM tbl_reservations
  WHERE bcode not in
  (
  SELECT bcode
  FROM tbl_reservations
  where resdate='2013-09-25' AND retdate is null
  )
AND 
    ((timestart < '10:00' AND timeend < '10:00')
    OR (timestart > '15:00' AND timeend > '15:00')

    )
)

時間範囲の OR の AND を切り替えます。

于 2013-09-25T15:42:49.533 に答える