Php 有没有一种方法可以只显示一行的总和,当前显示两行作为输出

Php 有没有一种方法可以只显示一行的总和,当前显示两行作为输出,php,mysqli,Php,Mysqli,我有四列(驱动程序ID、开始时间、结束时间、花费的分钟数) 当用户登录开始时间列将被填写,当用户注销结束时间将被填写,并将计算总分钟数。每次用户登录时,都会插入新行 我试图显示每一天花费的总分钟数 比如说 Date (13 - 2 - 2019) - 630 minutes spent Date ( 12 - 2 - 2019) - 450 minutes spent etc... 但在我的例子中,2019年12月2日(凌晨4点)到2019年13月2日(凌晨3点59分)被视为

我有四列(驱动程序ID、开始时间、结束时间、花费的分钟数) 当用户登录开始时间列将被填写,当用户注销结束时间将被填写,并将计算总分钟数。每次用户登录时,都会插入新行

我试图显示每一天花费的总分钟数

比如说

Date (13 - 2  - 2019) -  630 minutes  spent 

Date ( 12 - 2 - 2019) -  450 minutes  spent 
etc... 
但在我的例子中,2019年12月2日(凌晨4点)到2019年13月2日(凌晨3点59分)被视为一天

如果用户从(13-2-2019)(凌晨2点)登录到(13-2-2019)(凌晨6点),则从后端对其进行编码。。它将在数据库中存储两行。 详情如下:

Driver ID  |  start time      | End time           | min spent 

3229       |  (13-2-2019)(2am)| (13-2-2019)(3.59am)|    120

3229       |  (13-2-2019)(4am) (13-2-2019)(6.00am) |   120
根据上述示例,第一行的最低花费应为2019年12月2日。对于这一点,我使用了如下的中间查询

下面的查询将输出两个结果:-

$sql = "SELECT * , date(start_time),sum(minutes_spent) FROM 
driver_online_session where driver_id='3229' AND
start_time    BETWEEN '2019-02-12 03:59:59' AND  '2019-02-13 03:59:59'
 GROUP by date(start_time)
 ORDER BY start_time DESC";

电流输出:-

id  3229  date : 2019-02-13 01:07:20  min spent : 61

id: 3229  date : 2019-02-12 04:00:00  min spent : 1024
我的预期输出应该是

id  3229  date : 2019-02-12 04:00:00  min spent : 1085

请帮我解决这个问题。谢谢

您是否尝试过从group by(也可能从select)中删除
开始时间
,而只按驱动程序ID分组(或者不按任何方式分组,因为驱动程序ID已限制为单个值)

由于您还限制了哪些开始时间可以返回到单个“天”(由您定义),因此它应该只返回开始时间在允许范围内的所有行,并将所有这些行的总数相加。既然你已经知道“一天”,你就不需要输出它了

试试这个:

SELECT 
  driver_id, sum(minutes_spent) 
FROM 
  driver_online_session 
WHERE
  driver_id='3229' AND
  start_time BETWEEN '2019-02-12 03:59:59' AND  '2019-02-13 03:59:59'
当然,如果您需要一个更通用的解决方案(例如,您可以一次显示多个“天”),那么这不会太好-您必须找到一种按自定义时间范围分组的方法-但它为您提供了一个起点。

找到了解决方案:- 从日期时间值和组中减去4小时

$sql = "SELECT driver_id , DATE(start_time - interval 4 hour),
SUM(minutes_spent) 
FROM driver_online_session 
where driver_id='3229' AND
start_time    BETWEEN '2019-02-11 03:59:59' AND  '2019-02-14 03:59:59'
GROUP by DATE(start_time - interval 4 hour)
ORDER BY date(start_time) DESC";

“但在我的例子中,2019年12月2日(凌晨4点)到2019年13月2日(凌晨3点59分)被视为一天”-数据库对此一无所知…现在只需按日期部分进行分组,这两种情况就不同了。所以你首先需要找到一种方法,把这个时间范围内的日期分组在一起。如果此“偏移量”在所有记录(以及DST,如果适用)中都是常量,那么您可以简单地从这些日期时间值中减去4小时,并对其进行分组。上面的查询修复了我的问题。但有一个问题。。。在这里它应该按日期分组。。。上面的查询适用于2019-02-12 03:59:59'和'2019-02-13 03:59:59',但如果是2019-02-11 03:59:59'和'2019-02-13 03:59:59',则应将日期分为两行2019-2-11-总最小支出和2019-2-12-总最小支出,这基本上就是我在最后一段中指出的。我没有在代码示例中直接提到这一点,因为您提出的问题是关于特定的日期范围。是否可以使用查询按日期显示分组,或者是否应该添加条件?可能。正如我的回答所说,我还没有详细调查过。我回答了关于所描述的确切情况的问题。如果你想更进一步,你可以自己调查,或者就这个更复杂的场景问一个新问题(或者两者都问!)。同时,我觉得我的回答解决了你最初的问题,所以我谦恭地请求你考虑把它标记为接受。