簡體   English   中英

PHP中的MySQL Count,而循環僅返回一個結果,然后返回Null

[英]MySQL Count in PHP while loop only returns one result then Null

好的,所以我有一些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”。

謝謝您能給我的任何幫助。

干杯!

更改數據模型呢?

表建築物可以保持不變:

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;

然后,您將為每座建築物排成一排,其中包括空房間。 您無需為每個建築物都配備一張桌子。

這確實沒有道理:

$count = mysql_result($result, 00);

var_dump($count[$v1]);

你的意思是寫:

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

var_dump($count[$v1]);

也不要使用名稱與其他表的列匹配的多個表。 您可以使用一個主鍵跨越兩列的表,例如,創建主鍵on($ buildingid,$ roomid),以便該表具有列$ buildingid,$ roomid和$ state。

mysql_result()返回一個字符串,而不是一個數組。 修改代碼,並檢查它現在是否可以正常工作。

var_dump($count);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM