0

私が取り組んでいるこの機器の在庫と予約システムについて助けを求めたいのですが...

だから...私は3つのテーブルを持っています。tbl_itemstbl_bulk_items、およびtbl_reservations

tbl_itemsにはすべてのアイテムが含まれます (UNIT ごとに分類された機器)

tbl_items_bulkには、バルクのすべてのアイテムが含まれます。例:包丁セット(12本/セット)

tbl_reservationsにはすべての予約情報が含まれています

これまでのところ、これはtbl_itemstbl_items_bulkテーブルのすべての項目を取得するためのクエリです。

SELECT bcode
FROM

/*gets all the items in the inventory*/
(SELECT bcode FROM tbl_items AS T1
UNION
SELECT bcode FROM tbl_items_bulk) AS T2

そして、別のクエリに対してクエリを実行して、tbl_reservation に存在しないすべての bcodes のリストを取得します (利用可能であることを意味します)...

/*gets all the items in the inventory that satisfies the given conditions*/
WHERE bcode
NOT IN
(SELECT bcode FROM tbl_test)

しかし、問題は、クエリをさらにフィルタリングしてすべての「利用可能な」アイテムを取得するために、条件を使用する必要があることです(適切に行う方法がわかりません)。

条件はこちら…

アイテムの bcode が予約テーブルにある場合、それは利用できません。または、それ (アイテム bcode) が予約テーブルにあるが、予約の日時がユーザーが述べるものと異なる場合でも、利用可能としてカウントできます。

たとえば、機器 1 は 2013 年 9 月 16 日の午前 7 時 30 分から午前 10 時 30 分まで予約されていました。午前 7 時 30 分から午後 10 時 30 分まで、別の日付 (たとえば 2013 年 9 月 17 日) に利用できるかどうかをユーザーが尋ねた場合、「利用可能」と表示されます。(私はそれをより明確にすることを願っています)

特定の日時にすべての「利用可能な」機器を入手する方法についてのアイデアはありますか?

私の現在のコード:

SELECT bcode
FROM
/*gets all the items in the inventory*/
(SELECT bcode FROM tbl_items AS T1
UNION
SELECT bcode FROM tbl_items_bulk) AS T2
/*gets all the items in the inventory that satisfies the given conditions*/
WHERE bcode
NOT IN
(SELECT bcode FROM tbl_test WHERE resDate!='2013-09-16')

2013 年 9 月 17 日更新:

最新のコード:

SELECT b.*
FROM (SELECT * FROM tbl_items
      UNION
      SELECT * FROM tbl_items_bulk
     ) b left outer join
     tbl_test t
     on b.bcode = t.bcode and
     NOT ('4:30' < t.timeSTART OR '7:00' > t.timeEND)
WHERE t.bcode is null;
4

2 に答える 2

0

コメントを追加することはできませんが、r.bcode が null であることについての質問に答えることができます。

左外部結合は、左側のテーブル (この場合はユニオンの結果) のすべての行と、右側 (table_reservation) の一致するすべての行を提供することを意味します。ユニオン結果セットの行が table_reservation に一致しない場合、bcode は null を返します。したがって、その列の null をフィルタリングすると、table_reservation に一致しないすべての行が返されます。

于 2013-09-16T15:41:56.437 に答える