好的,我有一些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 EmptyPHP中的查询如下所示(忽略硬编码的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;
}在我看来,这应该创建一个包含在" buildings“表中的建筑物的数组,启动一个循环,从数组中加载建筑物名称,并为表提供一个行计数,其中有多少行在state列中包含"Empty”。它实际做的是为第一个表提供一个计数,然后为其余的表提供"NULL“。
如果你能给我任何帮助,我将不胜感激。
干杯!
发布于 2013-02-27 23:11:09
$count = mysql_result($result, 00);
var_dump($count[$v1]);你的意思是这样写:
$count[$v1] = mysql_result($result, 00);
var_dump($count[$v1]);此外,不要使用名称与其他表的列匹配的多个表。您可以使用一个具有跨两列的主键的表,例如create primary key on($buildingid,$roomid),以便该表具有列$buildingid、$roomid和$state。
发布于 2013-02-27 23:21:39
如果改变你的数据模型呢?
表构建可以保持原样:
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-27 23:13:55
mysql_result()返回一个字符串,而不是数组。修改代码并检查它现在是否按预期工作。
var_dump($count);https://stackoverflow.com/questions/15115428
复制相似问题