【问题标题】:Write MySQL query to get the time user spent in each book page from the following table编写 MySQL 查询,从下表中获取用户在每本书页面上花费的时间
【发布时间】:2017-12-15 02:00:25
【问题描述】:

我有一个表格,显示用户将页面从上一个更改为下一个的时间。我需要一个表格来显示用户在每个页面上花费了多少时间。

例如

page | time 
1    | 10s
2    | 20s

这是我所做的,但应该有更好的方法而不使用 while

设置@page_number = 1;

while @page_number

选择 @page_number 为 page_number,

sum((prev_page = @page_number then TIME_TO_SEC(event_time) else -(TIME_TO_SEC(event_time)) end)) 作为时间的情况

来自 all_page_stats,其中 next_page = @page_number 或 prev_page = @page_number;

设置@page_number = @page_number +1;

结束;

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 什么是列类型-event_time?相同的 prev_pagenext_page 是否可以有多个条目?我的意思是prev_page=0 和next_page=1,这个组合会在表格的某个地方再次重复吗?
  • 为什么你的prev_pagenext_page有非排列值,在第11行next_page低于prev_page
  • Prev_page 是多余的。但是,如果用户在一秒钟内向前滑动了几页,您的模型将失败。您需要存储几分之一秒或单独递增的 PRIMARY KEY。
  • @mobasherfasihy 电子书很棒。它们让您可以向后和向前滚动

标签: jquery mysql database


【解决方案1】:

你可以这样做:你需要在你的表中添加一个自动增量 id

SELECT a.prev_page, a.next_page, a.event_time, 
  TIMESTAMPDIFF(SECOND,a.event_time,b.event_time) AS time 
FROM ebook a INNER JOIN ebook b ON b.id = (a.id + 1) 
ORDER BY a.id ASC

fiddle链接

输出如:

【讨论】:

  • 感谢您的回答,但不幸的是它不起作用,因为您假设我们可以将每一行与其下一行配对,但并非总是如此,例如用户从 8 转到 7 他非常快速地滑动页面在不到一秒的时间内从 7 点到 6 点和 6 点到 5 点。由于数据的主键是 uuid 且未排序的 6 到 5 首先出现。因此,我们的翻页次数如下 8 到 7 、5 到 6 和 6 到 7 次。正如您在此示例中看到的那样,您不应该将其与下一行配对。
  • 如果我们可以对数据进行排序,使“next_page”列之间的差异为 1,那么我们可以应用您的解决方案
  • @user3505838 我没有通过prev_pagenext_page 值对两行进行配对,而是从表的id 中使用,两行是否连续并不重要。
猜你喜欢
  • 2011-07-22
  • 2018-01-08
  • 2012-09-03
  • 1970-01-01
  • 2016-04-05
  • 2023-02-10
  • 1970-01-01
  • 2017-04-13
相关资源
最近更新 更多