在listform中创建一个矩阵

时间:2014-05-26 19:39:53

标签: mysql matrix

我在mysql中有一个用户表。 用户:

+---+-------+
| id| name  |
|---+-------+
| 1 | john  |
| 2 | david | 
| 3 | paul  |
+---+-------+

我想要的是一个包含所有这类用户关系的表(它就像是listform中的矩阵):

1|2 
1|3
2|1
2|3
3|1
3|2

哪个查询会产生所需的表格?我将如何添加用户时如何更新?

非常感谢提前!

PS。最终,我希望借助关系表Table with 3 levels of degree of separation使用它来存储用户之间的分离程度。我不确定这是否是朝着正确方向迈出的一步......

1 个答案:

答案 0 :(得分:0)

如果您想要所有用户组合,则可以使用交叉连接。在这种情况下,您将自己交叉加入表格。 'WHERE'条款确保你没有得到组合(1,1),(2,2)和(3,3):

SELECT a.id, b.id
FROM myusers a
CROSS JOIN myusers b
WHERE a.id <> b.id
ORDER BY a.id, b.id;

添加用户时,表格不会更新。我推荐使用视图,因为它始终是最新的。如果您不熟悉观看次数,请查看here作为初学者。

视图语法为:

CREATE OR REPLACE VIEW usercombos (id1 INT, id2 INT) AS
SELECT a.id as id1, b.id as id2
FROM myusers a
CROSS JOIN myusers b
WHERE a.id <> b.id
ORDER BY a.id, b.id;

您可以从视图中选择,就像它是一张桌子一样:

SELECT * FROM usercombos;