两张桌子。
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。
关于机会,有一个更好的桌子设计,我都是耳朵,并没有改变它的问题。但是,我无法更改为图形数据库。
干杯
答案 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及相关问题提供了我需要的洞察力。