我是php和MySQL的新手。 我有一个用这个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
我在视图上使用此代码.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
我错过了什么?
我认为我们都缺少的一件事是他正在设置$rowcount =mysqli_num_rows($result)
。
所以他当然得到三个,$row
计数需要设置为:$rowcount = $row['count']
就像奥利的例子一样。
您的查询不正确
select *,count(sid) from classs group by sid
应该是
SELECT studentID,COUNT(*) FROM classs GROUP BY studentID
小提琴
专业提示:不要在程序的查询中使用SELECT *
,除非您确切知道为什么要这样做。它可能是浪费和不正确的,尤其是在包含GROUP BY
的查询中。 此外,避免SELECT *
将使你在查询中正确获取列名。
您正在尝试按学生证汇总原始数据。
此查询将为您执行此操作。
SELECT studentID, COUNT(*) count
FROM class
GROUP BY studentID
我已经把它放进了一个 sqlfiddle http://sqlfiddle.com/#!2/5c6d1/1/0
我认为你的表格比你向我们展示的要复杂得多。在这种情况下,您可能会误会示例数据。
无论如何,大多数开发人员使用简单的SQL客户端(如phpMyAdmin或HeidiSQL之类的)对此类查询进行故障排除。然后他们将它们嵌入到他们的 php 中。