Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只需要显示每个ID的最新记录,并使用php&;显示每个类别的总和;mysql_Php_Mysql - Fatal编程技术网

只需要显示每个ID的最新记录,并使用php&;显示每个类别的总和;mysql

只需要显示每个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

我尽了一切努力想弄清楚,但我不能得到正确的总数。我的尝试要么添加所有记录,而不仅仅是最新的记录,要么只得到第一条记录

我的第一张桌子:hubs

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。