私が取り組んでいるこの機器の在庫と予約システムについて助けを求めたいのですが...
だから...私は3つのテーブルを持っています。tbl_items
、tbl_bulk_items
、およびtbl_reservations
。
tbl_itemsにはすべてのアイテムが含まれます (UNIT ごとに分類された機器)
tbl_items_bulkには、バルクのすべてのアイテムが含まれます。例:包丁セット(12本/セット)
tbl_reservationsにはすべての予約情報が含まれています
これまでのところ、これはtbl_items
とtbl_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;