PHP的MYSQL数据计数从mysql检索出错了

时间:2014-12-12 15:37:35

标签: php mysql select count

我是php和MySQL的新手。我有一个用SQL SQL构建的表

CREATE TABLE classs
(sid INT(11) NOT NULL,
cid INT(11) NOT NULL,
lid INT(11) NOT NULL,
 date DATE NOT NULL,
UNIQUE (sid, cid,lid,date));

我的数据库输入是

sid || cid|| lid date (ALL DATE IS DIFFERENT with in case of same ID)
==================================
2001      ||  1001   || 8
2001      ||  1001   || 8
2002      ||  1001   || 8
2003      ||  1001   || 8 
2003      ||  1001   || 8
==================================

在这里,我需要使用php构建一个代码来显示像这样的结果

2001          2
2002          1
2003          2

我在view.php上使用此代码

<?php
require_once('core/init.php');

$con=mysqli_connect("localhost","root","root","studentattendancesystem");

if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="select *,count(sid) from classs group by sid";
$result = $con->query($sql);

if ($result->num_rows > 0)
{
  while($row = $result->fetch_assoc()) 
  {
    $rowcount=mysqli_num_rows($result);
    $sid = $row["sid"];
    echo $sid, " ", $rowcount," ","<br>";    
  } 
}
else
{
  echo 'Failed';
} 

但我的输出是

2001         3 //should be 2
2002         3 //should be 1
2003         3 //should be 2

我错过了什么?

3 个答案:

答案 0 :(得分:2)

您的查询不正确

select *,count(sid) from classs group by sid

应该是

SELECT studentID,COUNT(*) FROM classs GROUP BY studentID

<强> Fiddle

答案 1 :(得分:2)

我认为我们都缺少的一件事是他正在设置$rowcount =mysqli_num_rows($result)

当然,他需要将三个$row计数设置为:$rowcount = $row['count'],就像在Ollie的例子中一样。

答案 2 :(得分:0)

专业提示:不要在程序中的查询中使用SELECT *,除非您知道完全为什么这样做。它可能是浪费和不正确的,尤其是在包含GROUP BY的查询中。此外,避免SELECT *会使您在查询中获得列名。

您正在尝试按学生ID汇总原始数据。

此查询将为您完成此操作。

SELECT studentID, COUNT(*) count
  FROM class
 GROUP BY studentID

我把它放进了一个平方米。 http://sqlfiddle.com/#!2/5c6d1/1/0

认为你的表比你向我们展示的更复杂。在这种情况下,您可能会误解示例数据。

无论如何,大多数开发人员使用简单的SQL客户端(如phpMyAdmin或HeidiSQL等)对此类查询进行故障排除。然后他们将它们嵌入到他们的PHP中。