Mysql 跟踪对象上用户之间的交互
我有一个数据集,其中许多用户对一组工件进行了注释,我想知道用户直接/间接与之交互的每个其他用户。我想开发一个查询,它显示每个用户和每个其他用户对他们也参与的工件做出的贡献。我的数据看起来像这样Mysql 跟踪对象上用户之间的交互,mysql,sql,Mysql,Sql,我有一个数据集,其中许多用户对一组工件进行了注释,我想知道用户直接/间接与之交互的每个其他用户。我想开发一个查询,它显示每个用户和每个其他用户对他们也参与的工件做出的贡献。我的数据看起来像这样 +----------+------+ | Artifact | User | +----------+------+ | 1 | a | | 1 | b | | 1 | c | | 1 | d | | 2 |
+----------+------+
| Artifact | User |
+----------+------+
| 1 | a |
| 1 | b |
| 1 | c |
| 1 | d |
| 2 | a |
| 2 | m |
+----------+------+
因此,在这种情况下,用户a与b、c、d&m进行了交互;b与a、c和d进行了互动;m与a进行了互动
理想情况下,它不会显示重叠(因此仅显示不同的值),但我可以在必要时清除这些重叠您可以使用
GROUP\u CONCAT
函数:
SELECT
t1.User, GROUP_CONCAT(DISTINCT t2.User ORDER BY t2.User)
FROM
test t1
JOIN test t2 ON (t1.Artifact = t2.Artifact AND t1.User != t2.User)
GROUP BY t1.User
好的,这就是我想要的,谢谢!但实际上有太多的重叠,它并没有显示所有的关系,有没有一种方法也可以删除重复项(请注意我对示例代码的调整),在m&b有重复项的地方。在更新的查询中,我也更新了答案(添加:GROUP_CONCAT(DISTINCT…)