好的伙计们,这可能有一个简单的答案,但现在已经把我困扰了几个小时。
我使用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中调用该代码的任何想法?
提前致谢!
答案 0 :(得分: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 ";
答案 1 :(得分:0)
只需使用 Sum()的单个查询。如果您已经显示所有行,也可以手动计算它。 (如果分页或使用LIMIT,您将需要一个单独的查询,如下所示。)
$query = "
SELECT Sum(((EndTime - StartTime)/3600)) AS SumTotalPeriodHours
FROM TimeRecords
WHERE
Date BETWEEN '{$CurrentYear} - {$CurrentMonth} - 1'
AND '{$CurrentYear}-{$CurrentMonth} - 31'
";
答案 2 :(得分: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中进行。
关于您的代码的一些评论:
并非所有月份都有31天,因此可能会产生意外结果。如果您使用的是PHP5.3 +,则可以使用
$ date = new DateTime(); $ endDate = $ date->格式('Y-m-t');
这里的“t”标志是该月的最后一天。有关DateTime的更多信息,请参阅PHP docs。