首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP/MySQL的平均响应时间

问使用PHP/MySQL的平均响应时间
EN

Stack Overflow用户
提问于 2013-12-05 08:58:31
回答 3查看 1.7K关注 0票数 7

我在一个MySQL数据库中有两个表。一个叫tickets,另一个叫ticket_updates

票列如下:

  1. 序列
  2. 票号
  3. 日期时间

和ticket_updates

  1. 序列
  2. ticket_seq
  3. 日期时间
  4. 开始时间
  5. 终时

ticket_seq表中的ticket_updates列与tickets表中的ticketnumber列链接。ticket_updates中可能有多个行链接到tickets表中的一行。

我想显示一个平均响应时间多长时间的票,以得到答复。两个表中的datetime列都是添加/插入(Y-m-d H:i:s)时的完整时间戳。

我怎样才能显示平均响应时间,比如说上周?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-19 08:00:47

从Andy的聊天中我了解到,您将票证的响应时间定义为tickets.datetime与该票证的第一个ticket_updates.datetime之间的时间。在这种情况下,以下查询返回过去7天中添加的票的平均响应时间(以秒为单位)。

代码语言:javascript
复制
SELECT avg(response_seconds)
  FROM (
     SELECT time_to_sec(timediff(min(u.datetime), t.datetime)) AS response_seconds
       FROM tickets t
       JOIN ticket_updates u
         ON t.ticketnumber = u.ticket_seq
      WHERE t.datetime > now() - INTERVAL 7 day
      GROUP BY t.ticketnumber ) AS r
票数 2
EN

Stack Overflow用户

发布于 2013-12-18 23:52:44

我已经收集了一个完整的例子。我假设了一些关于您的数据的事情--如果列类型错误,则适当地进行更改。我还将以秒为单位返回平均更新时间。

代码语言:javascript
复制
CREATE TABLE tickets (
  sequence int(10) not null auto_increment primary key,
  ticket_number int(10) not null default 0,
  date_added timestamp,
  index ticket_number_index (ticket_number)
  );

INSERT INTO tickets (ticket_number, date_added) VALUES
  (1, '2013-12-01 01:00:00'),
  (2, '2013-12-15 02:00:00'),
  (3, '2013-12-10 03:00:00'),
  (4, '2013-12-13 04:00:00'),
  (5, '2013-12-17 05:00:00');


CREATE TABLE ticket_updates (
  sequence int(10) not null auto_increment primary key,
  ticket_number int(10) not null default 0,
  date_added timestamp,
  starttime datetime,
  endtime datetime,
  index ticket_number_index (ticket_number)
  );

INSERT INTO ticket_updates (ticket_number, starttime, endtime, date_added) VALUES
  (1, '2013-12-01 01:01:00', '2013-12-01 01:02:00', '2013-12-01 01:02:00'),
  (1, '2013-12-01 01:01:00', '2013-12-01 01:02:00', '2013-12-01 01:02:00'),
  (2, '2013-12-15 02:01:00', '2013-12-15 02:02:00', '2013-12-15 02:02:00'),
  (2, '2013-12-15 02:01:00', '2013-12-15 02:02:00', '2013-12-15 02:02:00'),
  (2, '2013-12-15 02:01:00', '2013-12-15 02:02:00', '2013-12-15 02:02:00'),
  (2, '2013-12-15 02:02:00', '2013-12-15 02:02:50', '2013-12-15 02:02:50'),
  (4, '2013-12-13 04:01:00', '2013-12-13 04:02:00', '2013-12-13 04:02:00'),
  (4, '2013-12-13 04:01:00', '2013-12-13 04:05:30', '2013-12-13 04:05:30'),
  (5, '2013-12-17 05:01:00', '2013-12-17 05:03:00', '2013-12-17 05:03:00');

然后你可以运行这个查询..。

代码语言:javascript
复制
SELECT SUM(TO_SECONDS(ticket_updates.date_added) - TO_SECONDS(tickets.date_added)) / count(*) as update_time
FROM tickets, ticket_updates
WHERE tickets.ticket_number = ticket_updates.ticket_number AND
  ticket_updates.date_added > now() - INTERVAL 1 WEEK

不确定这是否正是你想要的--但是这个(和小提琴)可能会帮助你更接近答案。

见Fiddle:http://sqlfiddle.com/#!2/4c0acc/1

票数 1
EN

Stack Overflow用户

发布于 2013-12-05 09:04:13

平均值是所有值的总和(在您的示例中,您必须将datetime转换为UNIX时间戳),然后将该总和除以总数。转换可以通过MySQL来完成,例如,发出命令

代码语言:javascript
复制
SELECT unix_timestamp(str_to_date('30/05/2011','%d/%m/%Y'));

或者在PHP中显示结果。这取决于项目的逻辑和结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20395511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档