我有一个有效的预订查询。此查询检查预订时哪些项目可用。
[PROJECT]: projectid, datefrom, dateto, ...
[ITEM]: itemid, itemgroupid, ...
[ITEMGROUP]: itemgroupid, itemgroupname, ...
[RESERVELIST]: itemid, projectid, reservelistnr
SELECT *
FROM item i inner join itemgroup ig on i.itemgroupid = ig.itemgroupid
WHERE i.itemid NOT IN (
SELECT r.itemid
FROM reservelist r inner join project p on r.projectid = p.projectid
WHERE p.datefrom BETWEEN '$datefrom' AND '$dateto'
OR p.dateto BETWEEN '$datefrom' AND '$dateto'
OR '$datefrom' BETWEEN p.datefrom AND p.dateto
OR '$dateto' BETWEEN p.datefrom AND p.dateto
)
ORDER BY itemid
$datefrom 和 $dateto 是预订时间的日期。
现在此查询运行良好,但如果有人在 08:00 - 21:00 之间进行预订,则下一次预订只能在 21:01 进行,而不能在 21:00 进行。所以我需要有一个小于和大于。
我玩了很多 < 和 >,但不知何故,它似乎不起作用。
我最好的猜测是这应该是一个很好的解决方案:
SELECT *
FROM item i inner join itemgroup ig on i.itemgroupid = ig.itemgroupid
WHERE i.itemid NOT IN (
SELECT r.itemid
FROM reservelist r inner join project p on r.projectid = p.projectid
WHERE p.datefrom > '$datefrom' AND p.datefrom < '$dateto'
OR p.dateto > '$datefrom' AND p.dateto < '$dateto'
OR '$datefrom' > p.datefrom AND '$datefrom' < p.dateto
OR '$dateto' > p.datefrom AND '$dateto' < p.dateto
)
ORDER BY itemid
不幸的是,事实并非如此。
有人知道吗?