MySQL查询提取电子邮件邻居

时间:2017-03-29 17:38:18

标签: mysql email graph

我有一个名为personxmessage的MySQL表,从电子邮件中提取。它有三个字段,id(主键),MessageID和PersonID。对于MessageID引用的每条消息,有两条或更多条记录,每条记录都包含电子邮件中包含的人员的PersonID(即发件人,发送给或cc)。

我想查询此表以获取链接列表,其中显示链接到给定PersonID = XXXX的所有人员,以及他们之间的链接通过包含在包含XXXX的电子邮件中定义,最好包括权重显示出现次数的链接。另一种说法是,在图表术语中,我正在尝试获取XXXX的neighborhood。例如,对于

这样的条目
MID   PID
1     1
1     2
1     3
2     1
2     2
3     1
3     3
3     4

对于PersonID 1,我想获得链接列表

P1    P2    Count    
1     1     3 
1     2     2 
1     3     2 
1     4     1 
2     3     1
3     4     1

是否可以通过某种自我加入来实现这一目标?如果是这样,我会使用什么查询?我已经完成了一些更简单的连接(例如,获取XXXX的星图和其他与电子邮件上的XXXX一起使用的PersonID),但这个是我的头脑。

1 个答案:

答案 0 :(得分:1)

你可以使用GROUP_CONCAT做某种类似的事情。它不是一个表,而是每个中间相关pid的结果集。

select mid, group_concat(distinct pid order by pid separator ', ') as related_ppl
  from personxmessage
 group by mid;

<强>结果

  mid   related_ppl
    1   1, 2, 3
    2   1, 2
    3   1, 3, 4

我认为这是你正在寻找的东西:

select p.pid as pid1, pp.pid as pid2, count(*) as cnt
  from personxmessagep
  left join personxmessagepp
    on p.mid = pp.mid
   and p.pid < pp.pid
 group by p.pid, pp.pid;

<强>结果

pid  pid2 cnt
1    2    2
1    3    2
1    4    1
2         1
2    3    1
3         1
3    4    1
4         1