Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 计算当前行和上一行之间的时差_Php_Mysql - Fatal编程技术网

Php 计算当前行和上一行之间的时差

Php 计算当前行和上一行之间的时差,php,mysql,Php,Mysql,我的web应用程序有下表,我想添加另一列以获取当前行和前一行之间的时间差。我怎样才能做到呢 目前,这里是我从php应用程序中调用的sql $stmt = $db->prepare("SELECT device,lat,lon, speed, mode, DATE (`currentTime`) ,TIME_FORMAT(`currentTime`, '%H:%i:%s') FROM myTable

我的web应用程序有下表,我想添加另一列以获取当前行和前一行之间的时间差。我怎样才能做到呢

目前,这里是我从php应用程序中调用的sql

$stmt = $db->prepare("SELECT device,lat,lon, speed, mode, DATE (`currentTime`) ,TIME_FORMAT(`currentTime`, '%H:%i:%s')
                            FROM myTable 
                            WHERE  device=?  limit ?");
$stmt ->bind_param('ii', $device_Number ,$limit);
$stmt ->bind_result($device, $lat, $lon, $speed, $mode, $currentDate, $currentTime);
$stmt ->execute();

这里我给出了带有日期时间差的示例数据,这里您将数据保存在两个不同的列中 因此,将日期差视为两列“时差”和“日差”

testtime

    id  date1       time1 
    1   2017-08-14  01:06:11
    2   2017-08-14  01:09:13
    3   2017-08-14  01:16:10
    4   2017-08-14  01:21:00
    5   2017-08-15  01:21:00
    6   2017-08-15  02:13:00
Mysql查询是

    SELECT A.id, A.time1, TIMESTAMPDIFF(SECOND,A.time1,B.time1) AS timedifference,
    TIMESTAMPDIFF(DAY,A.date1,B.date1) AS daydifference 
    FROM testtime A INNER JOIN testtime B ON B.id = (A.id + 1) 
    ORDER BY A.id ASC 

这里我给出了带有日期时间差的示例数据,这里您将数据保存在两个不同的列中 因此,将日期差视为两列“时差”和“日差”

testtime

    id  date1       time1 
    1   2017-08-14  01:06:11
    2   2017-08-14  01:09:13
    3   2017-08-14  01:16:10
    4   2017-08-14  01:21:00
    5   2017-08-15  01:21:00
    6   2017-08-15  02:13:00
Mysql查询是

    SELECT A.id, A.time1, TIMESTAMPDIFF(SECOND,A.time1,B.time1) AS timedifference,
    TIMESTAMPDIFF(DAY,A.date1,B.date1) AS daydifference 
    FROM testtime A INNER JOIN testtime B ON B.id = (A.id + 1) 
    ORDER BY A.id ASC 
如果存在my_表,则删除表;
创建表格my_表格
(设备INT不为空)
,lat DECIMAL(10,6)不为空
,lon十进制(10,6)不为空
,速度十进制(5,2)
,模式INT不为空
,dt DATETIME不为空
,主键(设备,dt)
);
在my_表中插入值
(117,1.415738,103.82360,28.8,3,'2017-07-12 22:07:40'),
(117,1.424894,103.82561,31.9,3,'2017-07-12 22:08:41'),
(117,1.429965,103.82674,10.9,3,'2017-07-12 22:09:47'),
(117,1.430308,103.82873, 5.2,3,'2017-07-12 22:10:47'),
(117,1.430542,103.83278,13.9,3,'2017-07-12 22:11:48'),
(117,1.430537,103.83325, 3.2,3,'2017-07-12 22:12:47');
选择x*
,秒到秒时间(时间到秒(x.dt)-时间到秒(最大(y.dt)))差异
从我的表x
左边
加入我的桌子
在y.device=x.device上
y.dt
删除表格(如果存在我的表格);
创建表格my_表格
(设备INT不为空)
,lat DECIMAL(10,6)不为空
,lon十进制(10,6)不为空
,速度十进制(5,2)
,模式INT不为空
,dt DATETIME不为空
,主键(设备,dt)
);
在my_表中插入值
(117,1.415738,103.82360,28.8,3,'2017-07-12 22:07:40'),
(117,1.424894,103.82561,31.9,3,'2017-07-12 22:08:41'),
(117,1.429965,103.82674,10.9,3,'2017-07-12 22:09:47'),
(117,1.430308,103.82873, 5.2,3,'2017-07-12 22:10:47'),
(117,1.430542,103.83278,13.9,3,'2017-07-12 22:11:48'),
(117,1.430537,103.83325, 3.2,3,'2017-07-12 22:12:47');
选择x*
,秒到秒时间(时间到秒(x.dt)-时间到秒(最大(y.dt)))差异
从我的表x
左边
加入我的桌子
在y.device=x.device上
y.dt
在db行中存储这样的内容似乎有点多余。你为什么要这样做?我不会存储在数据库中,而是在你真正需要的时候计算它。您可以在DB端使用DateTime:Diff或在PHP中使用DateTime:Diff执行此操作,因为我需要知道每行的时间差,以便进一步计算。步骤1:将日期和时间存储为单个实体。在DB行中存储这样的内容似乎有点多余。你为什么要这样做?我不会存储在数据库中,而是在你真正需要的时候计算它。您可以在DB端使用DateTime:Diff或在PHP中使用DateTime:Diff执行此操作,因为我需要知道每行的时间差以便进一步计算。步骤1:将日期和时间存储为单个实体。这假设存在id列,并且所述列的值是连续的。无法获取@Strawberry这假设同时存在id列和所述列的值是连续的。无法获取@草莓