首页 > 解决方案 > Sum 列返回不准确的结果

问题描述

我正在编写一些代码来计算 mysql 表的“持续时间”列中的秒数。我目前使用的代码似乎是对列的所有行求和,除了第一行。

例如,如果表包含 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 的总和,但是总和数量不正确,并且似乎总是跳过了要求和的列中表的第一行。

在以下屏幕截图中,求和的列是第一个表中的“持续时间”列。然后将总和转换为小时的十进制表示并显示在第二个表的“总小时”列中。无论将什么值输入到表中,最终结果 TOTAL HOURS 总是缺少第一行的数据。

输出截图

当我绕过 PHP 在 mysql 数据库本身上运行相同的查询时,我得到了相同的结果。下面是在数据库上运行的查询的屏幕截图。

这些是正在查询的行

这是数据库返回的求和结果

从截图中可以看出,找到了3条记录,第一条记录的时长是13.38小时,第二条记录是0.19小时,第三条记录是0.05小时,但是数据库产生的总和是888秒,或者0.24 小时。

标签: phpsqlmysqli

解决方案


找到了解决方案。我将查询更改为:

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

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

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


推荐阅读