首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的MySQL计数while循环只返回一个结果,然后为空

PHP中的MySQL计数while循环只返回一个结果,然后为空
EN

Stack Overflow用户
提问于 2013-02-27 23:05:26
回答 3查看 1.3K关注 0票数 0

好的,我有一些MySQL表,如下所示:

代码语言:javascript
复制
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,我稍微简化了代码):

代码语言:javascript
复制
$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“。

如果你能给我任何帮助,我将不胜感激。

干杯!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-27 23:11:09

代码语言:javascript
复制
$count = mysql_result($result, 00);

var_dump($count[$v1]);

你的意思是这样写:

代码语言:javascript
复制
$count[$v1] = mysql_result($result, 00);

var_dump($count[$v1]);

此外,不要使用名称与其他表的列匹配的多个表。您可以使用一个具有跨两列的主键的表,例如create primary key on($buildingid,$roomid),以便该表具有列$buildingid、$roomid和$state。

票数 0
EN

Stack Overflow用户

发布于 2013-02-27 23:21:39

如果改变你的数据模型呢?

表构建可以保持原样:

代码语言:javascript
复制
Buildings
Building-ID    Building-Name
===========----=============
1              Building-1
2              Building-2
3              Building-3
4              Building-4

新表:

代码语言:javascript
复制
Rooms
Building-ID Mroom State
===========-=====-=====
1           1     1
1           2     0
2           1     0

状态0=空,状态1=已预订

然后将联接与group by一起使用:

代码语言:javascript
复制
select count(*) from buildings b inner join rooms r on r.bid = b.id where r.state = 0 group by b.id;

然后,您将获得每栋建筑的一行,其中包含空房间的数量。你不需要为每一栋楼准备一张桌子。

票数 1
EN

Stack Overflow用户

发布于 2013-02-27 23:13:55

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

代码语言:javascript
复制
var_dump($count);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15115428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档