PHP SQL计算rota访问之间的差距

时间:2014-04-01 19:54:46

标签: php mysql sql resultset

我在解决如何编写此代码方面遇到了一个小问题。我有一个MySQL查询返回一个班次日期列表。返回的数据如下所示:

id |    date    |  stime   |  etime   | staff | client
------------------------------------------------------
1  | 2014-01-01 | 08:00:00 | 08:30:00 | Dave  | Mary
2  | 2014-01-01 | 08:35:00 | 09:05:00 | Dave  | Clive
3  | 2014-01-01 | 09:17:00 | 09:32:00 | Dave  | Joan
4  | 2014-01-01 | 09:38:00 | 10:08:00 | Dave  | Doris

我需要弄清楚电话之间的差距。即第1行etime与第2行stime之间的差距。答案应为5。 我可以使用PHP轻松解决差异,但无法弄清楚如何获得: 第1行为etime,第2行为stime,第2行为etime,第3行为stime等......依此类推。 ..我想某种交替功能,但不知道。

我确实需要指出id不会是连续的。

我是这个网站的新手并且四处看看是否已经问过这个问题。如果有,我道歉。 感谢任何可以提供帮助的人。

编辑:@sean已经回答了我的问题,但id结果必须是连续的。我需要了解如何使用非连续LEFT JOIN

进行id

2 个答案:

答案 0 :(得分:0)

使用LEFT JOIN加入下一行stime。确保重命名t2.stime,以使其不含糊。

SELECT t1.*, 
       t2.stime as `nxt_row_stime` 
FROM table t1 
LEFT JOIN table t2 
ON t2.id = t1.id+1

注意:这要求id增量中没有间隙。

答案 1 :(得分:0)

确定!在@Sean和我的Auntie Lou:D的帮助下,我已经解决了这个问题。我确信有一种更简单的方法可以做到这一点。

我决定创建一个新表并将所需信息复制到其中并生成新的id。因为我只在一个小型数据库上工作,所以我并不担心开销。

首先CREATEtabletemp_gaps),然后SELECT原始tableplacements)所需的信息,不包括id列。这会将原始表中的数据复制到没有ID的新表中。新表生成一个新的auto_increment ID,因此现在新表中的所有内容都按顺序排列:

CREATE TABLE temp_gaps 
(
  `id` mediumint(6) NOT NULL auto_increment,
  `date` date NOT NULL,
  `stime` time NOT NULL,
  `etime` time NOT NULL,
  `staff` varchar(50) NOT NULL,
  `client` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
)
engine=memory AS 
  (SELECT date,stime,etime,staff,client 
   FROM   placements 
   ORDER  BY `staff`,`date`,`stime` ASC)

一旦信息被复制,我就可以使用@Sean上一个答案来提取left_join etime列的信息,然后我可以在我的PHP脚本中处理数据结果。一旦我完成了,我只需drop表,一切都很好。

感谢Sean向我发送了正确的方向。