如何对多个mySQL表中包含的各种关键数据进行汇总和分组?

问题描述 投票:0回答:1

我想跟踪我的用户在我的网站上的生命周期中如何进展到独家状态,例如:

registered
updated profile
first post
etc.

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

Group       Subgroup
Referred    Search
Referred    Email
Engineer    Software
Engineer    Hardware

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

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

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

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

为了使用第三方工具提供正确的图表(用于群组分析),我需要查询并导出为以下汇总格式(需要转换为 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

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

php mysql sql apache
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.