Mysql边缘列表,结合子查询结果

时间:2014-07-19 08:02:35

标签: mysql graph subquery

我拥有的:

两张桌子。

T1:
| Node-id |位置(X,Y)|
----------------------------

T2:
| Edge-id | Node-Id1 | Node-Id2 |
---------------------------------------------

我需要什么:

我想基本上迭代边缘ID,检索Node-id,然后访问每个节点对的Position。这将允许我在应用程序中绘制图形中所有连接节点之间的边缘。

但是我似乎偶然发现了一个稍微不平凡的问题,或者至少对我来说是非常微不足道的。

我相信我需要使用子查询,因为我想从我的边缘Id中获取所有节点,将它们转发到节点表并检索位置。但是,当我尝试返回多个列时,MySql会抱怨...

无论如何将Node-Id1和Node-Id2视为单个大型列并从子查询返回?然后我只需要记住Xpos2和Ypos2在行数的一半开始。

我尝试了什么...

这并不是特别有用,但这里的查询让我最接近。

SELECT X( `LOCATION` ) AS Xpos1, Y( `LOCATION` ) AS Ypos1
FROM  `nodes` ,  `edges` 
WHERE  `NODE ID` 
IN (
SELECT  `NODE ID1` as `NODE ID`
FROM  `edges` 
WHERE  `EDGE ID` =0
)
GROUP BY  `NODE ID` 
LIMIT 0 , 30

然而,上述查询缺少一个非常重要的部分。哪个是NODE ID2位,理想情况下将其结果发送到Xpos2和Ypos2。

关于机会,有一个更好的桌子设计,我都是耳朵,并没有改变它的问题。但是,我无法更改为图形数据库。

干杯

1 个答案:

答案 0 :(得分:0)

这是我正在寻找的难以捉摸的路线:

SELECT X( n1.LOCATION ) AS Xpos1, Y( n1.LOCATION ) AS Ypos1, X( n2.LOCATION ) AS Xpos2, Y( n2.LOCATION ) AS Ypos2
FROM edges
INNER JOIN nodes n1 ON ( n1.`NODE ID` = edges.`NODE ID1` ) 
INNER JOIN nodes n2 ON ( n2.`NODE ID` = edges.`NODE ID2` ) 
LIMIT 0 , 30

answer及相关问题提供了我需要的洞察力。