有効な予約クエリがあります。このクエリは、予約時に利用可能なアイテムを確認します。
[プロジェクト]: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
残念ながら、そうではありません。
誰かアイデアはありますか?