【问题标题】:PHP SQL Working out gaps between visits on a rotaPHP SQL 计算轮播访问之间的间隔
【发布时间】:2014-04-01 19:54:45
【问题描述】:

我在弄清楚如何编写此代码时遇到了一个小问题。我有一个返回班次日期列表的 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

我需要计算通话之间的间隔。 IE。第 1 行中的 etime 和第 2 行中的 stime 之间的差距。答案应该是 5。 我可以使用 PHP 轻松计算出差异,但无法计算出如何获得: etime 来自第 1 行,stime 来自第 2 行,然后 etime 来自第 2 行,stime 来自第 3 行等等......等等......我猜是某种交替功能,但不知道。

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

我是这个网站的新手,我环顾四周看看是否有人问过这个问题。如果有,我很抱歉。 感谢任何可以提供帮助的人。

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

【问题讨论】:

    标签: php mysql sql resultset


    【解决方案1】:

    使用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 增量中没有间隙。

    【讨论】:

    • 啊...会有差距,因为我正在使用 WHERE 语句运行查询。
    • 我的mysql查询技能有限/生疏。我知道有一种方法可以选择结果集中的下一行,一旦我记得我将如何更新我的答案。
    • 谢谢肖恩。生病也继续挖掘。感谢帮助?
    • 我已经对它进行了排序@sean。谢谢您的帮助。请参阅下面的答案。
    【解决方案2】:

    好的!在@Sean 和我的Auntie Lou 的帮助下,我已经解决了:D。不过我确信有一种更简单的方法。

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

    首先CREATE 一个新的table (temp_gaps),然后SELECT 来自原始table (placements) 的所需信息,不包括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_joinetime 列,然后我可以在我的 PHP 脚本中处理数据结果。完成后,我只需 drop 餐桌,一切都很好。

    感谢 Sean 让我朝着正确的方向前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      相关资源
      最近更新 更多