我是一個新手,但我正在努力掌握Web開發的藝術,並在我的學習過程中由於SQLite查詢錯誤地失敗。房間可用性檢查SQLite查詢
這是我的數據庫設計:
我想看看可用客房,但我只是查詢不給我正確的結果!
我使用假預訂手動填充了SQLite數據庫,然後對已經預訂完全相同的日期進行了各種查詢,但預訂的房間一直顯示爲可用,因爲它在查詢日期前後確實可用!但查詢日期是重要日期!這就是爲什麼預訂的房間不應該出現!但我無法提出正確的查詢!
我的假訂票:
一個房間與房間數101從2016年5月10日預訂到2016年5月13日
這是我的「最佳」到目前爲止查詢:
SELECT * FROM Rooms NATURAL LEFT JOIN Booking WHERE RoomType='SR' AND
Checkout IS NULL OR Arrival <= '2016-05-10' AND Checkout <= '2016-05-10'
AND RoomType='SR' OR Arrival >= '2016-05-13' AND Checkout >= '2016-05-13'
AND RoomType='SR' OR Arrival <> '2016-05-10' AND Checkout <> '2016-05-13'
AND RoomType='SR';
SR
是RoomType(單人間)
房間數101需要從結果完全消失,當我運行的查詢!但101不斷出現!
Arrival
和Checkout
字段在SQLite數據庫中的類型爲DATE
。
你們能幫我嗎?
而且,我在PHP中正確執行PRAGMA外鍵事情嗎?預訂表中的CustomerID和RoomNumber是外鍵。
<?php
$db = new PDO('sqlite:gshotel.db');
$db->exec('PRAGMA foreign_keys = ON;');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
prepare...
execute...
?>
非常感謝你
使用括號。很確定你的WHERE子句應該是(A和B和C)或(D和E和F)或...也簡化它,你不需要檢查4次以確保RoomType ='SR ',你只需要檢查一次。 – Dresden