php - 根据另一个表列值计算字段总数

标签 php mysql sql

room      | beds available | ****table room****
==================================
room1     | 4
room2     | 2 
room3     | 4

room      | occupant       | ****table occupant****
==================================
room1     | arnold
room1     | berry
room2     | charles
room2     | daisy
room3     | eric
room3     | frank
room3     | greg

我希望获得以下输出:

没有。有床位的房间数量:2 ||可提供床位的房间:1号房、3号房

我想我需要

  1. 为每个独特的房间存储计数*并将计数存储为数组
  2. 根据这个数组减去每个房间的可用床位
  3. 有结果时显示房间名称 > 0

php 片段代码应该是什么样的?

最佳答案

这些 SQL 查询可以解决问题。

请记住,您可以删除不需要的列以节省您正在处理的数据量...

select r.id AS 'room',
    r.beds as 'total_beds',
    count(o.occupant) as 'taken_beds',
    r.beds-count(o.occupant) as 'free_beds'

FROM room r LEFT JOIN occupant o ON r.id = o.room
GROUP BY r.id

HAVING r.beds > count(o.occupant)

这只会返回未满的房间。

MySQL Result

如果在任何其他时候,您也希望返回完整的房间,只需删除“HAVING”子句

select r.id AS 'room',
    r.beds as 'total_beds',
    count(o.occupant) as 'taken_beds',
    r.beds-count(o.occupant) as 'free_beds'

FROM room r LEFT JOIN occupant o ON r.id = o.room
GROUP BY r.id

MySQL Result without HAVING clause

关于php - 根据另一个表列值计算字段总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36939864/

相关文章:

mysql - 选择五个最高的不同记录

mysql - 如何从 MySQL 中的 SEC_TO_TIME 获取时间并忽略格式上的秒数?

MYSQL:根据集合中其他字段的值设置型号

php - 解析mysql查询的结果

php - 为什么 C 打印的值与 PHP 打印的值不同?

php - WebSocket 不适用于 https 请求,并且它使用 PHP Ratchet 库与 http 正常工作

php - 使用 ID 进行 INSERT 查询

php - 在 Doctrine2 上有条件地连接表

mysql - 从另一个不存在条目的数据库插入

php - 在 PHP 和 MySQL 方面需要帮助