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中的查询如下(忽略硬编码,我已经简化了代码):

$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 = 已预订

然后使用 group by 加入:

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]);

也不要使用名称与其他表的列匹配的多个表。您可以使用一个具有跨两列的主键的表,例如在 ($buildingid,$roomid) 上创建主键,以便该表具有 $buildingid、$roomid 和 $state 列。

于 2013-02-27T15:11:09.017 回答
0

mysql_result() 返回一个字符串,而不是一个数组。修改代码并检查它现在是否按预期工作。

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