0

我想跟踪我的用户如何在我的网站上通过他们的生命周期进入独家状态,例如:

registered
updated profile
first post
etc.

虽然状态总是排他性的 - 意味着一次一个特定的状态 - 用户也可能属于各种组和子组,例如:

Group       Subgroup
Referred    Search
Referred    Email
Engineer    Software
Engineer    Hardware

我计划将这些状态更改记录到 mySQL 表中,相应地更新每个用户的唯一行:</p>

user_lifecycle tbl
---------------------
user_id (pk)
join_date
state

而且我认为组应该存储在另一个表中,因为用户可以同时属于多个:

user_groupings tbl
-------------------------
grouping_id (auto-counter - pk)
user_id
group
subgroup

为了使用第 3 方工具提供正确的图表(用于群组分析),我需要查询并导出为以下汇总格式(需要将其转换为 CSV)

Group,Subgroup,Joined,Registered,Updated Profile,First Post
Referred,Search,10/25/12,5,5,5
Referred,Search,10/26/12,10,10,0
Referred,Email,10/25/12 5,5,5
Referred,Email,10/26/12 5,0,5
Engineer,Software,10/25/12,0,5,10
Engineer,Software,10/26/12,15,5,0
Engineer,Hardware,10/25/12,10,5,0
Engineer,Hardware,10/26/12,5,5,5
Total,,10/25/12,10,10,10
Total,,10/26/12,20,10,5

我的表结构适合这个吗?如果是这样,我该如何查询以提供所需的结果?如果没有,你会改变什么,相应的查询是什么?如果有帮助,我也将使用 PHP 服务器端。我认为这可能有效:

SELECT join_date AS Date, SUM(IF(state = ‘registered’, 1, 0)) AS 'Registered', SUM(IF(state = ‘updated profile’, 1, 0)) AS 'Updated Profile', SUM(IF(state = ‘first post’, 1, 0)) AS 'First Post'
FROM user_lifecycle
GROUP BY join_date

但我不确定如何正确添加另一个表并添加其他分组。

4

1 回答 1

0

那么分组表应该是一个连接表,并且组也应该有一个自我引用。例如:

groups
--------
id
name
parent_id (fk to groups)

user_groups
------------
id (auto-counter - pk)
user_id
group_id

通过这种方式,您可以将用户分配给一个组,并且一个组可以有多个子组。但是,如果您想支持多个级别的子组(即子组可以有子组),那么您将需要查看嵌套集实现。

于 2013-07-18T00:08:59.713 回答