只需要显示每个ID的最新记录,并使用php&;显示每个类别的总和;mysql
我尽了一切努力想弄清楚,但我不能得到正确的总数。我的尝试要么添加所有记录,而不仅仅是最新的记录,要么只得到第一条记录 我的第一张桌子:hubs只需要显示每个ID的最新记录,并使用php&;显示每个类别的总和;mysql,php,mysql,Php,Mysql,我尽了一切努力想弄清楚,但我不能得到正确的总数。我的尝试要么添加所有记录,而不仅仅是最新的记录,要么只得到第一条记录 我的第一张桌子:hubs hubID hubName 1 hub1 2 hub2 我的第二张表:hub_报告 reportID hubID date health school 1 1 2012-04-27 467
hubID hubName
1 hub1
2 hub2
我的第二张表:hub_报告
reportID hubID date health school
1 1 2012-04-27 467 322
2 2 2012-04-23 267 22
3 1 2012-01-20 176 623
因此,您看到的是两个表,一个是组织名称和其他信息,另一个是每个组织每季度提交的报告。我想列出所有组织及其最新报告。在表的底部,我想添加当前可用的所有健康工具包和学校工具包
下面是我现在用来显示所有组织及其最新报告的代码
SELECT * FROM (SELECT hubName, date, health, school FROM hub_reports,
hubs WHERE hub_reports.hubID = hubs.hubID ORDER BY date DESC) AS Total
GROUP BY hubName
这似乎有效,但当我尝试同样的策略来获得健康和学校专栏的总数时,我没有得到正确的答案
SELECT SUM(health) FROM (SELECT hubName, date, health FROM
hub_reports, hubs WHERE hub_reports.hubID = hubs.hubID ORDER BY date
DESC) AS Total GROUP BY hubName
我在另一个论坛上找到了一种左加入的方法,我尝试了另一种方法,但似乎效果并不好。但我可能做得不对
请帮忙 我刚刚在我的一个项目中遇到了类似的问题。这个问题的一个变体对我有效。希望对你有帮助
SELECT hubs.hubName, hub_reports.*,
SUM(hub_reports.health) AS ttl_health,
SUM(hub_reports.school) AS ttl_school
FROM hubs, hub_reports
WHERE hub_reports.hubID = hubs.hubID
GROUP BY hub_reports.hubID
ORDER BY hub_reports.date DESC
以下是PHP:
$rs = mysql_query( 'SELECT hubs.hubName, hub_reports.*,
SUM(hub_reports.health) AS ttl_health,
SUM(hub_reports.school) AS ttl_school
FROM hubs, hub_reports
WHERE hub_reports.hubID = hubs.hubID
GROUP BY hub_reports.hubID
ORDER BY hub_reports.date DESC' );
$grand_total['school']=0;
$grand_total['health']=0;
while ( $row = mysql_fetch_assoc( $rs ) ){ // Step through each hub
echo "{$row['hubName']} shows {$row['ttl_school']} total school, {$row['ttl_health']} total health";
$grand_total['school'] += $row['ttl_school'];
$grand_total['health'] += $row['ttl_health'];
}
echo "Grand Total School: {$grand_total['school']}, Grand Total Health: {$grand_total['health']}";
您可能正在寻找
MAX()
函数
试试这个:
SELECT h.hubID, h.hubname, MAX(hr.date) as hrdate, SUM(hr.health) as health, SUM(hr.school) as school
FROM hubs h
LEFT JOIN hub_reports hr ON hr.hubID = h.hubID
GROUP BY h.hubID
编辑
您需要最大日期,因此它只返回最近的条目(当然,假设您的条目是按日期输入的)。但是,如果您只需要最新的运行状况报告,为什么需要中心的总和?我需要每个中心的最新报告。我列出了所有集线器,每个类别中有多少工具包,在底部添加每个类别中的所有工具包,这样他们就可以看到整个组织中都有哪些可用的工具包。你能告诉我你将如何响应ttl_health的价值吗?我一直在获取数组的第一个值,而不是求和。我用一些PHP代码进行了更新,如果您还有问题/麻烦,请告诉我您帮了我很多!谢谢你抽出时间。我知道你在做什么,但这还不是我想要的。我正在寻找列出的所有三个(以后还会有更多)中心的医疗包总数。然后是所有的学校用具等等。这是我正在处理的页面的链接。我明白你的意思了!您可以在
while()
循环中轻松地将总数制成表格。看到上面的更新,让我知道这是不是更接近。好的,所以我们如此接近,我可以品尝它!我更新了我的页面,以便您可以查看所有记录。总数仍在增加所有记录,而不仅仅是最新记录。我花了一点时间,但我知道它在做什么。它不是不计算旧记录,而是将它们全部相加。查询只显示3条记录,每个中心一条,这就是我们想要的。但如果你看一下健康包的数字,你会发现Fawn有11个和34个。34不应该被计算在内,因为它的报告日期比11早,但它做的是加上11和34,得到总数中显示的45。