我的 SQL 查询再次出现问题...
D.0.02 已分配给第 1 天第 1 期,因此应该计为 0。但它尚未分配给第 1 天第 2 期。为什么它返回为 0?
SELECT COUNT(DISTINCT rm.Id)
FROM ts_room rm LEFT JOIN ts_roompref rp ON rp.room_id = rm.id
LEFT JOIN ts_request rq ON rq.id = rp.request_id
LEFT JOIN ts_allocation a ON a.request_id = rq.id
WHERE room_id = "D.0.02"
AND (a.status IS NULL OR a.status IN ('Pending', 'Failed', 'Declined'))
AND (day_id=1 AND period_id=2)
这是我的 fiddle :http://sqlfiddle.com/#!2/5e1de/13
如果状态不是“待处理”、“失败”、“拒绝”,则房间将被忽略,但它可能在其他时间段或天数内可用但未预订 - 如果未预订则未分配 - 这意味着 day_id 和 period_id 将不存在,但房间仍可免费预订。
看来我需要重新输入我的 SQL 查询。有什么建议吗?
最佳答案
Count()
即使没有匹配的行,始终也会返回一个数字。
在您的情况下,没有行匹配,因此 count() 返回 0
。
编辑:
您的选择会计算预订数量。 0表示未预订。
如果您想在未预订时返回 1,则需要将其反转:
SELECT 1 - COUNT(DISTINCT rm.Id)
FROM ts_room rm LEFT JOIN ts_roompref rp ON rp.room_id = rm.id
LEFT JOIN ts_request rq ON rq.id = rp.request_id
LEFT JOIN ts_allocation a ON a.request_id = rq.id
WHERE room_id = "D.0.02"
AND a.status = 'Allocated'
AND day_id=1 AND period_id=2
请注意,如果您进行更广泛的搜索,例如一天中的所有时段,则需要将 1
更改为时段数 (9
) 才能返回空闲插槽的数量。
关于php - 即使未分配空间,SQL 计数值也会返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14955152/