0

これを把握するためにあらゆることを試みましたが、正しい合計を取得できません。私の試みは、最新のレコードだけでなくすべてのレコードを追加するか、最初のレコードのみを取得します。

私の最初のテーブル: ハブ

hubID    hubName
1           hub1
2           hub2

私の 2 番目のテーブル: 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 つのテーブルです。1 つは組織名とその他の情報、もう 1 つは各組織が四半期ごとに提出するレポートです。すべての組織とその最新レポートをリストしたいと思います。テーブルの一番下に、現在利用可能なすべての健康キットとスクール キットを追加します。

すべての組織とその最新レポートを表示するために現在使用しているコードを次に示します。

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 アプローチを使用して他の方法を試しましたが、うまく機能していないようです。でも、私のやり方が悪かったのかもしれません。

助けてください!

4

2 に答える 2

0

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 の日付が必要なため、最新のエントリのみが返されます (もちろん、エントリが日付で入力されていると仮定します)。

于 2012-05-01T18:54:45.323 に答える
0

私のプロジェクトで同様の問題が発生しました。このクエリのバリエーションがうまくいきました。お役に立てば幸いです。

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']}";
于 2012-05-01T04:02:42.340 に答える