1

わかりました、これはおそらく簡単な答えを持っていますが、ここ数時間私を困惑させています.

PHP/HTML を使用して、MySQL テーブルからテーブルを生成しています。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 からそのコードを呼び出す場所に関するアイデアはありますか?

前もって感謝します!

4

3 に答える 3

3

これを試して

$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 ";
于 2012-04-17T04:22:31.267 に答える
0

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

$query = "
    SELECT Sum(((EndTime - StartTime)/3600)) AS SumTotalPeriodHours
    FROM TimeRecords
    WHERE 
        Date BETWEEN '{$CurrentYear} - {$CurrentMonth} - 1'
        AND '{$CurrentYear}-{$CurrentMonth} - 31'
";
于 2012-04-17T04:15:13.637 に答える
0

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

$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( 'Ymt' );

ここの「t」フラグは、その月の最終日を取得します。DateTime の詳細については、 PHP ドキュメントを参照してください。

于 2012-04-17T06:10:21.813 に答える