2012-04-17 8 views
1

これはおそらく簡単な答えがありますが、今は数時間私を困惑させています。テーブルからのデータを集計するMySQLとPHP:

私はMySQLテーブルからテーブルを生成するためにPHP/HTMLを使用しています。 MySQLテーブル(TimeRecords)には、StartTimeとEndTimeの列があります。私のSELECTステートメントでは、StartTimeからEndTimeを引いて、TotalHoursとしてエイリアシングしています。ここまでの質問はこれです:

$query = "SELECT *,((EndTime - StartTime)/3600) AS TotalPeriodHours 
    FROM TimeRecords 
    WHERE Date 
    BETWEEN '{$CurrentYear}-{$CurrentMonth}-1' 
    AND '{$CurrentYear}-{$CurrentMonth}-31' 
    ORDER BY Date 
    "; 

私はそれをHTMLテーブルを通してループします。ここまでは順調ですね。私がしたいのは、TotalHoursをすべてまとめて、それを別のDIVに入れることです。 1)どのようにselect文を書くか、2)PHP/HTMLからそのコードをどこで呼び出すかについてのアイデア?

ありがとうございます!

+0

sqlのSUMを見てみましょう。 ajaxを使用してhtmlからPHPスクリプトを呼び出します。 –

+0

@BenniKaなぜ地球上でAJAXを使用しますか?とにかく彼はajaxを使用していると提案する質問には全く何もないし、とにかくそれは必要ではない。 – liquorvicar

+0

@liquorvicar私は:彼が2)のために、htmlサイトからそれを呼びたい場合。 –

答えて

0

Sum()という単一のクエリを使用してください。既にすべての行を表示している場合は、手動で計算することもできます。 (LIMITページの区切りや使用している場合は、以下のような別のクエリが必要になります。)

$query = " 
    SELECT Sum(((EndTime - StartTime)/3600)) AS SumTotalPeriodHours 
    FROM TimeRecords 
    WHERE 
     Date BETWEEN '{$CurrentYear} - {$CurrentMonth} - 1' 
     AND '{$CurrentYear}-{$CurrentMonth} - 31' 
"; 
3

すると、あなたがGROUP BY WITH ROLLUPを使用して一意のIDを持っている場合は、同じクエリでこの操作を行うことができ、この

$query= " 
    SELECT ((EndTime - StartTime)/3600) AS Hours, otherFields, ... 
    FROM TimeRecords 
    WHERE 
     Date BETWEEN '{$CurrentYear} - {$CurrentMonth} - 1' 
     AND '{$CurrentYear}-{$CurrentMonth} - 31' "; 

$records =mysql_query($query); 
$sum= 0; 
while($row=mysql_fetch_array($records)) 
{ 
     echo"$row['otherFields']"; 
     echo"$row['Hours']"; 
    $sum+=$row['Hours']; 
} 

echo" Total Hours : $sum "; 
+0

これは私が言及した手動の集計方法です。 PHPのすべての行を反復処理することが望ましくない場合、別のSum()クエリを実行することはオプションです。 – zanlok

+0

ありがとう!私はPHPを完全に忘れてしまったことをMySQLに任せることに集中していました – anthropaulogy

0

をお試しくださいこの場合

$query = " 
    SELECT unique_id,SUM((EndTime - StartTime)/3600) AS TotalPeriodHours 
    FROM TimeRecords 
    WHERE Date BETWEEN '{$CurrentYear}-{$CurrentMonth}-1' 
     AND '{$CurrentYear}-{$CurrentMonth}-31' 
    GROUP BY unique_id WITH ROLLUP 
    ORDER BY Date 
"; 

とクエリから最後の結果はNULLに含まれており、全体の合計。一意のIDを持っていない場合は、Naveenの答えに従ってPHPで行う必要があります。

あなたのコードのいくつかのコメント:SELECTを使用して

  • *は良い習慣とはみなされません。必要な列を選択します。
  • すべての月が31日であるとは限らないため、予期しない結果が生じることがあります。 PHP5.3 +を使用している場合は、

    $ date = new DateTime();を使用できます。 $ endDate = $ date-> format( 'Y-m-t');

"t"フラグは、その月の最終日を取得します。 DateTimeの詳細については、PHP docsを参照してください。

関連する問題