将限制计数到另一个表中定义的特定值

时间:2016-05-02 12:56:32

标签: php mysql sql count limit

这是我有的2张表

unit

unit name    |    no. of beds
-----------------------------
unit 1       |         4
unit 2       |         3

worker

name         |    unit name
-----------------------------
worker 1     |     unit 1
worker 2     |     unit 1
worker 3     |     unit 1
worker 4     |     unit 1
worker 5     |     unit 1
worker 6     |     unit 2

我需要计算每个单元的床位数,但是将每个计数限制在相应单位的床位数。即如果在表格单元中,单元1定义为有4个床位,但在表格工作者中它有5个工人标记为单元1,它应该只将计数返回为4。

这就是我现在所拥有的,但它会返回总数,而不考虑否。为每个房间定义的床位。

我想要的结果是为可用床位数返回“2”。如何将其纳入我的查询?

enter image description here

$sql = "SELECT COUNT(*) AS 'count_worker' FROM worker WHERE (`unit_id` IS NOT NULL and `unit_id` <> '')";
$rs = CustomQuery($sql);
$data = db_fetch_array($rs);

$sql2 = "SELECT SUM(no_bed) AS 'count_vacancy' FROM unit WHERE `active` = 'yes'";
$rs2 = CustomQuery($sql2);
$data2 = db_fetch_array($rs2);

$vacancy = $data2["count_vacancy"] - $data["count_worker"];
if ($vacancy >0)
{
echo "# of beds available: " . $vacancy;
}
else 
{
echo "# of beds available: 0";
}

1 个答案:

答案 0 :(得分:1)

http://sqlfiddle.com/#!9/674e4/1

SELECT 
  w.unit_name, 
  if(w.cnt<=u.no_of_beds,w.cnt,u.no_of_beds)
FROM (
  SELECT count(*) cnt, unit_name
  FROM worker
  GROUP BY unit_name) w
LEFT JOIN unit u
ON w.unit_name = u.unit_name

并获得可用床位数 http://sqlfiddle.com/#!9/88734/2

SELECT 
  u.unit_name, 
  if(w.cnt<=u.no_of_beds,u.no_of_beds-w.cnt, IF(w.cnt IS NULL,u.no_of_beds,0)) beds_available
FROM unit u
LEFT JOIN (
  SELECT count(*) cnt, unit_name
  FROM worker
  GROUP BY unit_name) w
ON w.unit_name = u.unit_name;