0

わかりましたので、次のようないくつかの MySQL テーブルがあります。

Buildings
Building-ID    Building-Name
===========----=============
1              Building-1
2              Building-2
3              Building-3
4              Building-4


Building-1
Mroom    State
=====----======
1        Booked
2        Empty
3        Empty
4        Empty

Building-2
Mroom    State
=====----======
1        Booked
2        Empty
3        Empty
4        Empty

PHP でのクエリは次のとおりです (ハードコードされた while は無視してください。コードを少し簡略化しました)。

$sql = "select * from Buildings";
$result = mysql_query ($sql) or die(mysql_error());
while ($row = mysql_fetch_array($result)) 
{ 
$building[] = $row['ward_name'];
}    


$v1 = 0;
while ($v1 < 4)
{
$sql = "SELECT COUNT(*) FROM `$building[$v1]` WHERE state = 'Empty'";
$result = mysql_query($sql) or die(mysql_error());
$count = mysql_result($result, 00);

var_dump($count[$v1]);
$v1 = $v1 + 1;
}

私の考えでは、これは「建物」テーブルに含まれる建物の配列を作成し、ループを開始し、配列から建物名をロードし、「空」を含む行数のテーブルに行数を提供する必要があります状態欄。実際に行うことは、最初のテーブルにカウントを提供し、残りに「NULL」を提供することです。

助けていただければ幸いです。

乾杯!

4

3 に答える 3

1

データモデルの変更についてはどうですか?

テーブルの建物はそのまま保管できます。

Buildings
Building-ID    Building-Name
===========----=============
1              Building-1
2              Building-2
3              Building-3
4              Building-4

新しいテーブル:

Rooms
Building-ID Mroom State
===========-=====-=====
1           1     1
1           2     0
2           1     0

状態 0 = 空、状態 1 = 予約済み

次に、グループによる結合を使用します。

select count(*) from buildings b inner join rooms r on r.bid = b.id where r.state = 0 group by b.id;

次に、空の部屋の数を含む各建物の行を取得します。建物ごとにテーブルは必要ありません。

于 2013-02-27T15:21:38.813 に答える
0

これは意味がありません:

$count = mysql_result($result, 00);

var_dump($count[$v1]);

あなたは書くつもりです:

$count[$v1] = mysql_result($result, 00);

var_dump($count[$v1]);

また、他のテーブルの列と名前が一致する複数のテーブルを使用しないでください。代わりに、2つの列にまたがる主キーを持つ1つのテーブルを使用できます。たとえば、テーブルに$ buildingid、$ roomid、および$ stateの列が含まれるように、主キーon($ buildingid、$ roomid)を作成します。

于 2013-02-27T15:11:09.017 に答える
0

mysql_result() は、配列ではなく文字列を返します。コードを変更し、期待どおりに動作することを確認します。

var_dump($count);
于 2013-02-27T15:13:54.837 に答える