我是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
我错过了什么?
答案 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中。