Piwik MySQL DB:计算用户操作的长度

Piwik MySQL DB: calculate length of user actions

我正在尝试计算 Piwik 跟踪的网站上用户操作的时长。会话数据存储在 MySQL table 'log_visit_action'.

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

在Excel我就知道怎么解决这个问题了。本身并不难。但是由于我是 MySQL 的新手,所以我不知道如何在具有 5000 万个条目的 MySQL table 上实现它。也许您可以提供一些代码示例?

这是我导出到 Excel 的 table 结构的屏幕截图。 在这里您可以找到关于 sqlfiddle.

的一些示例数据

非常感谢, 拉斯

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

解决方案(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 table。通常是这种情况,但您永远无法完全确定。

# 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;

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

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

介意删除临时的table。

DROP TEMPORARY TABLE tmp;