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

标签 php mysql

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

相关文章:

mysql - 为什么我的 MySql 查询没有返回我想要的返回行?

java - 为什么 apache 执行我的 shell 脚本中的所有命令而不是 java 的命令?

mysql - 计算满足查询的项目

php - 获取相关标签的 COUNT()

php - 返回最后 2 位数字

php - 使用 PHP 和多维数组将 MySQL 结果转换为 XML 格式

mysql - 来自工会的玛丽亚更新 - 或建议

php - ajax 调用包含 .htaccess 的文件夹的权限

php - 子查询 PHP 显示 0 结果

php - UTF-8贯穿始终