计数限制为另一个table中定义的特定值
Count limit to a specific value defined in another table
这是我拥有的 2 table
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
我需要计算每个单元的可用床位数量,但将每次计数限制为相应单元的床位数量。 IE。如果在 table 单元中,单元 1 定义为有 4 张床,但在 table 工人中它有 5 个工人标记到单元 1,它应该只 return 计数为 4.
这是我现在拥有的,但它是 return 的总计数,无视编号。为每个房间定义的床位。
我想要的结果是 return“2”表示可用床位的数量。如何将其合并到我的查询中?
$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";
}
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;
这是我拥有的 2 table
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
我需要计算每个单元的可用床位数量,但将每次计数限制为相应单元的床位数量。 IE。如果在 table 单元中,单元 1 定义为有 4 张床,但在 table 工人中它有 5 个工人标记到单元 1,它应该只 return 计数为 4.
这是我现在拥有的,但它是 return 的总计数,无视编号。为每个房间定义的床位。
我想要的结果是 return“2”表示可用床位的数量。如何将其合并到我的查询中?
$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";
}
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;