Php 将两个SQL查询组合到PDO
我在以下问题上陷入了困境。我有一系列的表格: 我想做的是获取一个房间的所有信息,假设预订量不超过该房间的可用房间数 因此,要获取我的房间详细信息,我的SQL是: 选择Rooms.RoomID作为RoomID, 房间名称,房间数量, MaxPeople现有床位, MaxExtraBeds, 麦克斯韦人, CostPerExtraPerson, 最大限度地保护儿童, 包括说得快, 切碎 从房间,房间细节 WHERE Rooms.accountationId=:辅助和 Rooms.RoomID=RoomDetails.RoomID 按房间名分组 返回后,我会得到这些房间的详细信息列表,如下所示: 然后,我使用此查询获取预订数量和房间ID: 选择Booking.RoomID, countBooking.RoomID作为预订 从预订 其中ArriveDate>=:aDate和 出发日期订房计数,则房间可用 如何合并这两个查询并简化代码以实现这一点Php 将两个SQL查询组合到PDO,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我在以下问题上陷入了困境。我有一系列的表格: 我想做的是获取一个房间的所有信息,假设预订量不超过该房间的可用房间数 因此,要获取我的房间详细信息,我的SQL是: 选择Rooms.RoomID作为RoomID, 房间名称,房间数量, MaxPeople现有床位, MaxExtraBeds, 麦克斯韦人, CostPerExtraPerson, 最大限度地保护儿童, 包括说得快, 切碎 从房间,房间细节 WHERE Rooms.accountationId=:辅助和 Rooms.RoomID=Ro
简单地说,我如何从RoomDetails中选择所有信息?给定预订中的到达日期、出发日期和RoomID,其中NumOfRooms>countBooking.RoomID在这些日期内,并且RoomID等于房间的RoomID。您的问题可以通过简单地更新SQL语句本身来解决: 选择r.RoomID作为RoomID, 室名, 新房, MaxPeople现有床位, MaxExtraBeds, 麦克斯韦人, CostPerExtraPerson, 最大限度地保护儿童, 包括说得快, 切碎 从r房间 加入RoomDetails路 在r.RoomID=rd.RoomID上 参加 选择b.RoomID, 住宿ID, 将b.室友计算为预订 预订b 其中ArriveDate>=:aDate
和DepartDate您可以选择所需日期范围内每个房间的所有预订计数作为子查询,然后根据所需住宿ID和所需NumOfRooms>BookingCount条件过滤的房间列表左键加入该子查询。这里的关键是用于此子查询的联接类型,因为内部联接会将结果限制为仅包含实际预订的房间
SELECT Rooms.RoomID as RoomID,
RoomName, NumOfRooms,
MaxPeopleExistingBeds,
MaxExtraBeds,
MaxExtraPeople,
CostPerExtraPerson,
MaximumFreeChildren,
IncludeBreakfast,
MinRate,
BookingCount
FROM Rooms
INNER JOIN RoomDetails on Rooms.RoomID = RoomDetails.RoomID
LEFT JOIN (
SELECT Booking.RoomID,
count(Booking.RoomID) as BookingCount
FROM Booking
WHERE ArriveDate >= :aDate AND
DepartDate <= :dDate
GROUP BY Booking.RoomID
) RoomBookings ON Rooms.RoomID = RoomBookings.RoomID
WHERE Rooms.AccommodationID = :aid
AND NumOfRooms > BookingCount
GROUP BY RoomName
offtopic:我可以问一下是什么用来生成SQL映像的吗?哪一点对不起?这些表是在Visio中创建的,SQL是键入的,数组来自chrome的控制台。使用Puush剪切屏幕上我想要ctrl+shift+4的部分。这就是所有的图片,因为我不确定你指的是哪个:谢谢你的回答。sql在没有第三个联接的情况下工作,但是第三个联接中的查询在没有其他所有sql的情况下工作,但是它们不能一起工作。我认为逻辑上的某个地方有缺陷。第三个内部联接返回例如4个RoomID及其预订。如果在此期间没有该室友的预订,则不会有该室友的登记。我发现,如果我更改和t.Bookings
SELECT Rooms.RoomID as RoomID,
RoomName, NumOfRooms,
MaxPeopleExistingBeds,
MaxExtraBeds,
MaxExtraPeople,
CostPerExtraPerson,
MaximumFreeChildren,
IncludeBreakfast,
MinRate,
BookingCount
FROM Rooms
INNER JOIN RoomDetails on Rooms.RoomID = RoomDetails.RoomID
LEFT JOIN (
SELECT Booking.RoomID,
count(Booking.RoomID) as BookingCount
FROM Booking
WHERE ArriveDate >= :aDate AND
DepartDate <= :dDate
GROUP BY Booking.RoomID
) RoomBookings ON Rooms.RoomID = RoomBookings.RoomID
WHERE Rooms.AccommodationID = :aid
AND NumOfRooms > BookingCount
GROUP BY RoomName