总和列返回的结果不正确

时间:2019-02-15 13:16:36

标签: php sql mysqli

我正在处理一些代码,以求和一个mysql表的“ duration”列中的秒数。我当前正在使用的代码似乎是对列的所有行进行求和,除了第一行。

例如,如果表包含3行,例如:

  1. 10
  2. 15
  3. 20

该列的总和应该为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始终会丢失第一行中的数据。

Screenshot of output

当我绕过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小时。

1 个答案:

答案 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')");

更改查询可以解决问题,但我没有找出问题的原因。无论我如何编写查询,返回的结果都是相同的,但是第一个查询的总和是错误的,而第二个查询的总和是正确的。

感谢大家的投入,并帮助我解决这个问题。