我只是想就我正在开发的这个设备库存和预订系统寻求帮助......
所以...我有 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 中不存在的所有 bcode 的列表(意味着它可用)...
/*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 保留。如果用户询问它是否可用于另一个日期(例如 2013-09-17),从上午 7:30 到晚上 10:30,它应该显示为“可用”。(我希望我说得更清楚)
关于如何在某个日期和时间获得所有“可用”设备的任何想法?
我当前的代码:
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;