【发布时间】:2018-06-23 01:33:41
【问题描述】:
我的 sql 数据库中有 3 个表:
Table Room
roomnumber roomtype
1 DeluxeRoom
2 DeluxeRoom
3 DeluxeRoom
100 StandardRoom
101 StandardRoom
102 StandardRoom
Room 是一个存储房间及其类型的表。
Table Reservation
reservationid checkin checkout
1 2017-01-01 2017-01-03
2 2017-01-10 2017-01-20
3 2017-02-05 2017-02-08
Reservation 是用户进行预订的表格。
Table RoomReserve
reservationid roomnumber
1 1
2 100
2 101
3 1
3 2
3 3
在 RoomReserve 中,对于每个预订 ID,我可以为房间号输入多个值。如果入住日期和退房日期不一样,我也可以为不同的预订ID输入相同的房间号。
当用户想要预订房间但我得到的结果错误时,我正在尝试在 php 中进行查询以计算可用房间。
这是我正在尝试的代码:
1) $sql="SELECT COUNT(roomnumber) FROM room WHERE roomtype='DeluxeRoom' AND roomnumber NOT IN (
SELECT * FROM roomreserve r,reservation e, room m WHERE r.reservation_id=e.reservation_id AND m.roomnumber=r.roomnumber
AND ('$checkin' BETWEEN start_date AND end_date) OR ('$checkout' BETWEEN start_date AND end_date))";
2) $sql="SELECT COUNT(roomnumber) FROM room WHERE roomtype='DeluxeRoom' AND roomnumber NOT IN (
SELECT COUNT(roomnumber) FROM roomreserve r,reservation e, room m WHERE r.reservation_id=e.reservation_id AND m.roomnumber=r.roomnumber
AND ('$checkin' BETWEEN start_date AND end_date) OR ('$checkout' BETWEEN start_date AND end_date))";
【问题讨论】:
-
如果您不知道答案,请不要标记问题。
-
尝试扩展一下短语“我正在尝试在 php 中查询...”
-
您需要分解问题。它与PHP相关吗?部分查询有效吗?问题是
BETWEEN还是reservation_id?查询中的字段名称与数据中的字段名称不匹配,SELECT *与roomnumber NOT IN子句不匹配。从一个较小的问题开始,然后从那里开始。 -
你怎么知道哪个用户预订了哪个房间?
-
如果我预订了 2 间房间,一间给我,一间给我的朋友,但我的朋友比我早一天到达,一天后离开怎么办?