我已经尝试了一切来解决这个问题,但我无法得到正确的总数。我的尝试要么添加所有记录,而不仅仅是最新的记录,要么只得到第一条记录。
我的第一个表:轮毂
hubID hubName
1 hub1
2 hub2
我的第二张桌子:hub_reports
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
因此,您看到的是 2 个表格,一个包含组织名称和其他信息,第二个包含每个组织每季度提交的报告。我想列出所有组织及其最新报告。在表格底部,我想添加当前可用的所有可用健康包和学校工具包。
这是我现在用来显示所有组织及其最新报告的代码。
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
我尝试了其他使用我在另一个论坛上找到的 LEFT JOIN 方法,但它似乎没有更好用。但我也许我做得不对。
请帮忙!
我刚刚在我的一个项目中遇到了类似的问题。这个查询的变体对我有用。希望对您有所帮助。
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
编辑
您需要 MAX 日期,以便它只返回最近的条目(当然,假设您的条目是按日期输入的(。