Php 计算行数并与给定的行数进行比较

Php 计算行数并与给定的行数进行比较,php,mysql,database,count,Php,Mysql,Database,Count,我想计算数据库中的行数,并使用它检查数据库中的值 $result =mysqli_query($cn,"SELECT * FROM set_ballot"); while($row = mysqli_fetch_array($result)) { $room_number = $row['room_number']; } $rows= mysqli_num_rows($result); if ($rows==$room_number) { echo "room full"; } 我想从数据库中

我想计算数据库中的行数,并使用它检查数据库中的值

$result =mysqli_query($cn,"SELECT * FROM set_ballot");
while($row = mysqli_fetch_array($result)) {
$room_number = $row['room_number'];
}
$rows= mysqli_num_rows($result);
if ($rows==$room_number) {
echo "room full";
}
我想从数据库中提取房间号
if($rows==5)
他正在工作

我想我的if陈述是错误的


我想检查数据库中的行数是否与房间号相同;它应该回应“房间满了”。当我使用一个值来代替
$room\u number
时,它会起作用,但当我使用
$room\u number
时,它不起作用。

正如我在评论中提到的,为了实现这一点,您需要使用MySQL的聚合函数,并计算表中的所有行,然后与给定的数字进行比较

$result = mysqli_query($cn,"SELECT COUNT(*) AS number FROM set_ballot");
$num = mysqli_fetch_array($result);
$count = $num["number"];
// echo("$count");

if($count == 60){
   echo "Rooms are full. ";
}
else{
   echo "Rooms are not full. ";
}
您提到数字将来自用户/管理员输入,因此您还可以为其分配一个变量以替换“60”

该查询现在将改为:

$admin_number = 60;

$result = mysqli_query($cn,"SELECT COUNT(*) AS number FROM set_ballot");
$num = mysqli_fetch_array($result);
$count = $num["number"];
// echo("$count");

if($count == $admin_number){
   echo "Rooms are full. ";
}
else{
   echo "Rooms are not full. ";
}
  • 我相信这就是你想要做的,而不知道数据库的其他部分是什么样子

编辑:

补充我在评论中提到的内容,并改进我的回答

例如,您可以添加一个名为“take”的额外列,并使用0/1标记方法,然后在
WHERE
子句中连同
count()
和使用
HAVING/count(column)
对这些列进行计数

我认为您目前可能正在做的是,您正在删除行并在以后添加它们,这可能会证明是低效的,并且会丢失数据,然后必须在以后重建行

我的意思是:

旁注:
$count\u number
$admin\u number
变量都需要作为整数匹配

$count_number = 60; // count if the number of rows in "taken" has a 1 flag

$admin_number = 60; // the number that the admin enters

$counter = mysqli_query($cn,"SELECT COUNT(*) AS number 
                             FROM set_ballot WHERE taken = 1 
                             HAVING COUNT(taken) = $count_number");

$num = mysqli_fetch_array($counter);
$count = $num["number"];
// echo("$count");

// if($count == 60){

if($count == $admin_number){
   echo " Yep! There are $count_number rooms taken. ";
}
else{
   echo " Nope, some are available. ";
}
子编辑:

实际上,在考虑了一下之后,有一个稍微好一点的方法,不必像我上面展示的那样使用两个变量,只需使用相同的变量
$count\u number

$count_number = 60;

$counter = mysqli_query($cn,"SELECT COUNT(*) AS id 
                             FROM set_ballot WHERE taken = 1 
                             HAVING COUNT(taken) = $count_number");
$num = mysqli_fetch_array($counter);
$count = $num["id"];
// echo("$count");

// if($count == 60){

if($count == $count_number){
   echo " Yep! There are $count_number rooms taken. ";
}
else{
 echo " Nope ";
}

参考资料:


脚注:

也许还有另一种方法可以做到这一点,但考虑到我在MySQL方面的技能,这就是我想到的


如果有人知道更好/更有效的方法,请给我留言。

为了让回答者或其他有类似问题的人更容易回答,请添加一个特定的问题陈述——“它不起作用”,可以假设,但它怎么不起作用?什么样的错误信息或错误行为是您的特征?您需要告诉我们您希望得到什么样的结果。如果您想计算结果,那么您可以使用MySQL的聚合
count()
函数以及其他可能有用的函数。PHP还有一个
count()
函数是
room\u number
列类型是整数还是text/varchar?是整数@Fred ii有些东西我没有掌握,也无法理解。我想你可能走错了方向。
房间号
列的值是多少?我认为你有一大堆带房间号的行,你想数一数那些被占用的行吗?如果是这样,您可以添加一个名为
take
的额外列,例如设置一个0/1标志,然后将
WHERE
子句中的列与
count()
一起计数。当然,我在这里想得很清楚,但你的问题对我来说有点不清楚。@Ona老实说,星期天不客气。很高兴我能帮忙,cheers@OnahOnallySunday根据我昨天在评论中提到的,关于使用0/1标记方法,我已经对我的答案进行了编辑,可以在编辑下找到。这可能会对你有用。非常感谢,我真的很感谢你的努力和时间。非常欢迎你@OnahOnallySunday我喜欢你的问题。
$count_number = 60;

$counter = mysqli_query($cn,"SELECT COUNT(*) AS id 
                             FROM set_ballot WHERE taken = 1 
                             HAVING COUNT(taken) = $count_number");
$num = mysqli_fetch_array($counter);
$count = $num["id"];
// echo("$count");

// if($count == 60){

if($count == $count_number){
   echo " Yep! There are $count_number rooms taken. ";
}
else{
 echo " Nope ";
}