Php 在SQL语句中,如果找不到特定查询的任何内容,则返回一个条目

Php 在SQL语句中,如果找不到特定查询的任何内容,则返回一个条目,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,这似乎有点复杂。但如果你能在这篇文章中快速阅读答案: 下面是我正在使用的sqlfiddle示例: 因此,这里应该发生的是,在我的sql查询中: SELECT r.RoomID AS RoomID, RoomName, NumOfRooms, MaxPeopleExistingBeds, MaxExtraBeds, MaxExtraPeople, CostPerExtraPerson, Maxim

这似乎有点复杂。但如果你能在这篇文章中快速阅读答案:

下面是我正在使用的sqlfiddle示例:

因此,这里应该发生的是,在我的sql查询中:

SELECT r.RoomID AS RoomID,
       RoomName,
       NumOfRooms,
       MaxPeopleExistingBeds,
       MaxExtraBeds,
       MaxExtraPeople,
       CostPerExtraPerson,
       MaximumFreeChildren,
       IncludeBreakfast,
       MinRate
FROM Rooms r
JOIN RoomDetails rd
    ON r.RoomID = rd.RoomID
JOIN (
    SELECT b.RoomID,
           AccommodationID,
           count(b.RoomID) AS Bookings
    FROM Booking b
    WHERE ArriveDate >= :aDate
      AND DepartDate <= :dDate
    GROUP BY RoomID
) t
    ON t.AccommodationID = r.AccommodationID
WHERE r.AccommodationID = :aid
    AND t.Bookings < NumOfRooms
GROUP BY RoomName
目前,它检查每个房间的预订量是否不足。然后显示它们。 但是,如果容量为1,并且没有预订。它不会显示房间


有没有可能以这样的方式重新构造此语句来解决此问题?

首先,您使用住宿id加入,并且您忽略了预订表的房间id,该表为您提供了错误的房间预订计数,您还需要使用房间id加入,还需要使用左连接,因此如果预订没有返回任何结果那么这意味着您的房间是可用的,当在t.conditionId=r.conditionId和r.RoomID=t.RoomID上使用join with时,您的预订栏将为空,即此房间没有预订,因此您需要附加where条件来检查预订是否为空,然后返回此房间,因为它也可以让客人入住

SELECT r.RoomID AS RoomID,
       RoomName,
       NumOfRooms,
       t.Bookings,
       MaxPeopleExistingBeds,
       MaxExtraBeds,
       MaxExtraPeople,
       CostPerExtraPerson,
       MaximumFreeChildren,
       IncludeBreakfast,
       MinRate
FROM Rooms r
LEFT JOIN RoomDetails rd
    ON r.RoomID = rd.RoomID
LEFT JOIN (
    SELECT b.RoomID,
           AccommodationID,
          COALESCE(count(b.RoomID),0) AS Bookings
    FROM Booking b
    WHERE ArriveDate >= '2014-02-26'
      AND DepartDate <= '2014-03-10'
    GROUP BY RoomID
) t
    ON( t.AccommodationID = r.AccommodationID 
       AND r.RoomID = t.RoomID)
WHERE r.AccommodationID = 1
   AND (t.Bookings < NumOfRooms OR t.Bookings IS NULL)
GROUP BY RoomName;