mysql - Piwik MySQL 数据库 : calculate length of user actions

标签 mysql session web-analytics matomo logfile

我正在尝试计算 Piwik 跟踪的网站上用户操作的时长。 session 数据存储在 MySQL 表“log_visit_action”中。

在“time_spent_action”列中,我想计算用户在采取下一步行动或离开网站之前花费的时间(没有为“idvisit”分配进一步的行动)。

在 Excel 中我会知道如何解决问题。本身并不难。但是因为我是 MySQL 的新手,所以我不知道如何在这个有 5000 万个条目的 MySQL 表上实现它。也许您可以提供一些代码示例?

这是我导出到Excel的表格结构截图。 在这里您可以找到关于 sqlfiddle 的一些示例数据.

非常感谢, 拉斯

Table Structure

最佳答案

我最近遇到了同样的问题。因此,这里有一个解决方案,使用临时表。实际上,我提供了两种解决方案。

方案(A)使用子查询识别后续的log_action_link(非常耗时)

# Very time-consuming
CREATE TEMPORARY TABLE tmp
    (INDEX idlink_follow (idlink_follow))
    SELECT idlink_va, time_spent_ref_action AS time_spent_action, idvisit, (
        SELECT idlink_va FROM piwik_log_link_visit_action b
        WHERE (a.idvisit = b.idvisit) AND (b.idlink_va < a.idlink_va)
        ORDER BY idlink_va
        LIMIT 1
    ) AS idlink_follow
    FROM piwik_log_link_visit_action a
    ORDER BY idvisit DESC, idlink_va DESC;

解决方案 (B) 取决于干净且完整的 piwik_log_link_visit_action 表。通常是这种情况,但您永远无法完全确定。

# Create table containing the time per action
# (requires a clean and complete piwik_log_link_visit_action)
CREATE TEMPORARY TABLE tmpA
SELECT idlink_va, time_spent_ref_action, idvisit
    FROM piwik_log_link_visit_action
    ORDER BY idvisit, idlink_va;
SELECT * FROM tmpA;

SET @lagID = NULL;
CREATE TEMPORARY TABLE tmp
    (INDEX idlink_follow (idlink_follow))
    SELECT @lagID AS idlink_follow, time_spent_ref_action AS time_spent_action, @lagID:=idlink_va AS idlink_va
    FROM tmpA
    ORDER BY idvisit, idlink_va;

DROP TEMPORARY TABLE tmpA;

基于临时表,可以访问页面次数:

SELECT l.idvisit, t.time_spent_action, l.*
FROM piwik_log_link_visit_action l
LEFT JOIN tmp t ON (t.idlink_follow = l.idlink_va)
ORDER BY l.idvisit, l.server_time

介意删除临时表。

DROP TEMPORARY TABLE tmp;

关于mysql - Piwik MySQL 数据库 : calculate length of user actions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32632772/

相关文章:

正则表达式的 MySQL GROUP?

php - 使用php的数组数据问题

ruby-on-rails - 如何通过 session ID 找到设计用户?

javascript - AJAX 可访问的长时间运行的服务任务在启用 ASP.NET 兼容性/ session 的环境中阻止后续的 AJAX 服务请求

geolocation - 是否可以跟踪用户访问特定网站的国家/地区?

php - 如何将 PHP 对象从一个页面传递到下一个页面两次?

javascript - Beginner Node/React/MySQL -> 查询数据库并显示结果

php - php7 的 zend session 数据库错误

cookies - 如何在_ga和_gid中生成第三个字段?

google-analytics - 一些好的Web分析工具