gpt4 book ai didi

php - 即使未分配空间,SQL 计数值也会返回 0

转载 作者:行者123 更新时间:2023-11-29 08:37:04 26 4
gpt4 key购买 nike

我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com