PHP / MySQL Count()问题

时间:2011-08-28 21:57:13

标签: php mysql

我正在尝试为使用PHP和MySQL的客户端创建一个类注册系统。我已经设置了数据库和表格,并且该部分工作得很好,但是,客户要求在注册时,如果有3个或更少的学生注册以警告该课程可能无法运行。

我正在尝试使用count()函数以及从注册PHP脚本设置的cookie中传递动态变量。但是,我遇到了障碍。我似乎无法获得count()函数来实际计算行数。我的选择声明如下。任何帮助将不胜感激。

$class = $_COOKIE["class"];

$min_check = "SELECT class_list, COUNT(class_list) as count 
              FROM T_Student WHERE class_list = '$class' 
              GROUP BY class_list 
              HAVING count < 20";
$result = mysql_query($min_check);
$count = mysql_num_rows($result);

if ($count < 4)
{
  echo "IF THERE ARE 3 OR FEWER PEOPLE SIGNED UP FOR THIS CLASS, IT MAY NOT RUN.\n";
  echo "THERE ARE CURRENTLY " . $count . " PEOPLE SIGNED UP.\n";
}
else if ($count > 4)
{
  echo "There are currently " . $count . " people signed up for this class.";
}
?>

4 个答案:

答案 0 :(得分:5)

您的SQL查询返回class_list值的列表,以及每个特定实例的计数,其中注册的人数少于20人。

$count = mysql_num_rows($result);

...获取结果集中返回的记录数,而不是别名count值,这就是您没有看到预期输出的原因。您需要读入结果集以获取值:

while ($row = mysql_fetch_assoc($result)) {
  $count = $row['count'];

  if($count < 4) { ... }
}

答案 1 :(得分:0)

我不建议使用count之类的已知MySQL标识符。这令人困惑。

$class = mysql_real_escape_string($_COOKIE["class"]);

$min_check = "SELECT class_list, COUNT(class_list) as mycount 
          FROM T_Student WHERE class_list = '$class' 
          GROUP BY class_list 
          HAVING mycount < 20";

不要忘记逃避该cookie的内容!

错误是count是保留字。你需要用反引号`count`包围它,或者甚至更好,使用不同的名字。这本身并不是一个错误,但它太混乱了。

接下来,您实际上并未从数据库中检索mycount结果。我建议使用这样的代码:

$result = mysql_query($min_check);
while( $row = mysql_fetch_assoc($result) ) {
    $people_count = $row['mycount'];
    if ($people_count < 4) { echo "this" }
    else { echo "that" }
}

答案 2 :(得分:0)

您想要的计数将在查询行中返回。 mysql_num_rows会计算返回的行数,这不是你想要的。请改用它。

$result = mysql_query($min_check);
$count = mysql_fetch_row($result);
$count = $count[0];

答案 3 :(得分:0)

乍一看,HAVING count < 20是不必要的。

您使用MySQL计数功能,但永远不会检索它的价值!?使用:

$firstRow = mysql_fetch_row($result);
$count = $firstRow[1]; // 1 indicates the second column (0 being the first)