2016-05-02 16 views
0

これは私がカウント制限

unitを持つ2つのテーブルです:私はノーカウントする必要が

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 

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

worker各ユニットのベッド数を制限しますが、各ユニットのベッド数に制限があります。私。テーブルユニットではユニット1はベッド4台と定義されていますが、テーブルワーカーではユニット1にタグ付けされた5人のワーカーしかいません。

これは私が今持っているものですが、いいえ、無視してください。各部屋ごとに定義されたベッド数。

私が望む結果は、利用可能なベッドの数に "2"を返すことです。それを私のクエリにどのように組み込むことができますか?可能なベッド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; 
+0

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 

jarlh

+0

これは、 "テーブルユニット、ユニット1が4つのベッドを持つように定義されているが、テーブルワーカーでユニット1にタグ付けされた5人のワーカーがいる場合は、 – e4c5

+0

jarlh、あなたはアクティブな列を無視することができます。実際には、すべてのユニットはアクティブまたは非アクティブです。それは私の質問に対してもう一つの条件です。 –

答えて

1

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

$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"; 
} 
enter image description hereおよび取得するための#は、列アクティブ、上記指定されていないを選択し使用していますあなた。