2013-02-27 42 views
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”。

我很感激你能给我的任何帮助。

干杯!

+2

[**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再被维护[并被正式弃用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 – h2ooooooo 2013-02-27 15:08:26

+0

开始调试。首先:第一次循环后'$ building'的价值是多少? – 2013-02-27 15:10:34

回答

0

这确实noit是有意义的:

$count = mysql_result($result, 00); 

var_dump($count[$v1]); 

你的意思写:

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

var_dump($count[$v1]); 

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

+0

现在我觉得自己像一个白痴。非常感谢!现在工作一个款待... – Compy 2013-02-27 15:13:41

0

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

var_dump($count); 
1

如何更改数据模型?

表buldings可以保持原样:

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; 

T如果你有空房间的数量,你会得到一排。你不需要每个建筑物的桌子。