我正在处理一些代码,以求和一个mysql表的“ duration”列中的秒数。我当前正在使用的代码似乎是对列的所有行进行求和,除了第一行。
例如,如果表包含3行,例如:
该列的总和应该为45,但我使用的代码将返回35,并完全跳过表的第一行。
这是我当前的代码:
// GET THE DATA FROM THE 'DURATION' COLUMN
$sql = mysqli_query($mysqli,"SELECT SUM(duration) AS total FROM timesheet WHERE username='$qname' AND payperiod='$payperiod'");
// LOOP AND ADD ALL THE DATA IN THE DURATION COLUMN
while ($result = mysqli_fetch_assoc($sql))
{
$duration = $result['total'];
}
我想念什么?该代码在运行时一直有效,并产生分配给变量$ duration的总和,但是总和不正确,并且似乎总是跳过要求和列中表的第一行。
在以下屏幕截图中,要累加的列是第一张表中的“ DURATION”列。然后,该总和将转换为小时的十进制表示形式,并显示在第二个表的“ TOTAL HOURS”列中。无论将什么值输入到表中(最终结果),TOTAL HOURS始终会丢失第一行中的数据。
当我绕过PHP在mysql数据库本身上运行相同的查询时,得到相同的结果。下面是在数据库上运行的查询的屏幕截图。
These are the rows that are being queried
This is the sum result returned by the database
从屏幕快照中可以看到,找到3条记录,第一条记录的持续时间为13.38小时,第二条记录的持续时间为0.19小时,第三条记录的持续时间为0.05小时,但数据库产生的总和为888秒或0.24小时。
答案 0 :(得分:0)
找到了解决方案。我从以下位置更改了查询:
$xxy = mysqli_query($mysqli,"SELECT SUM(duration) AS totalsum FROM timesheet WHERE username='$qname' AND payperiod='02/14/2019 - 02/21/2019'");
$xxy = mysqli_query($mysqli,"SELECT SUM(duration) AS totalsum FROM timesheet WHERE username='$qname' AND status='CLOCKED OUT' AND (timestamp_in BETWEEN '$start_date' AND '$end_date')");
更改查询可以解决问题,但我没有找出问题的原因。无论我如何编写查询,返回的结果都是相同的,但是第一个查询的总和是错误的,而第二个查询的总和是正确的。
感谢大家的投入,并帮助我解决这个问题。