php - Sum 列返回不准确的结果
问题描述
我正在编写一些代码来计算 mysql 表的“持续时间”列中的秒数。我目前使用的代码似乎是对列的所有行求和,除了第一行。
例如,如果表包含 3 行,例如:
- 10
- 15
- 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 小时。
解决方案
找到了解决方案。我将查询更改为:
$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')");
更改查询解决了问题,但我没有弄清楚问题的原因。无论我如何编写查询,返回的结果都是相同的,但是第一个查询的总和是错误的,而第二个查询的总和是正确的。
感谢大家的投入并帮助我解决这个问题。
推荐阅读
- android - 调用 onResume 时,viewpager 中的 RecyclerView 滞后
- c++ - 没有信号处理程序的 POSIX 计时器的目的是什么?
- javascript - Chrome 扩展程序和 gmail.js 阻止访问 google api
- highcharts - highcharts:如何更改上面图表的颜色?
- javascript - 有条件地分配对象值?
- javascript - javascript 中的 Promise 是如何工作的?我的 Promise 实现不一样
- c - 关于 C 中的联合
- git - 无法提交任何东西
- python - 为什么我的格式化程序函数接收索引而不是轴值?
- applescript - 简单的 AppleScript 启用一个 macOS 邮件帐户,禁用另一个?