我们如何从mysql事件数据和分层主数据中获取树的完整路径?

时间:2016-01-28 11:22:04

标签: mysql

我正在开发一种产品,用户可以阅读分支故事。在BI事件中,我们仅捕获用户选择一个节点而不是另一个节点的决策节点。我们还有一个故事内容的主数据,其中包含树的信息。所以,我们的表格如下:

user_events:

user_id link_id     
1000    1       
1000    7            
2000    2            
2000    6            

因此,具有user_id 1000的用户点击了链接1和7,其中用户2000点击了链接2和6.根据这一点,两个用户都遍历了不同的节点路径。静态路径详细信息存储在分层数据中,如下所示:

链接信息:

link_id         from_node    to_node    
1                101          102
2                101          103
3                102          104
4                104          105
5                103          106
6                106          107
7                105          107
8                106          108
9                105          108

在节点101,105和106处,用户可以采用两个不同的路径,并且它们是决策节点'在故事中(101到102或103; 105和106,到107或108)。因此,我们只捕获user_events中的那些点击信息,而不捕获中间路径,因为一旦用户点击决策节点就定义了这些路径。

现在从上面的两个表中,我试图生成每个用户遍历的完整路径,如下所示:

user_id    node_id
1000       101
1000       102
1000       104
1000       105
1000       107
2000       101
2000       103
2000       106
2000       107

但我在这里失去了如何实现这一目标。我正在尝试使用链接信息表加入用户事件表,但我只能获得第一个节点。有人可以说明实现这一目标的最佳途径吗?

1 个答案:

答案 0 :(得分:0)

尝试:

With Links as
(Select L1.link_id, L2.to_node as from_node, L1.from_node as to_node
from link_Info L1
inner join
link_Info L2 on L2.to_node=L1.from_node
union all
Select link_id, from_node, to_node 
from Link_info)
Select E.user_id, L.from_node as node_id
from user_events E inner join Links L
on L.link_id=E.link_id 
union all        
Select E.user_id, L.to_node as node_id
from user_events E inner join Links L
on L.link_id=E.link_id