Php 在SQL语句中,如果找不到特定查询的任何内容,则返回一个条目
这似乎有点复杂。但如果你能在这篇文章中快速阅读答案: 下面是我正在使用的sqlfiddle示例: 因此,这里应该发生的是,在我的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
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;