我不确定我所要求的是一个特定的查询还是能够解决这个问题的 php 代码,也许我所要求的是一个应用程序。我会尽力解释情况。
想象一系列现实世界的物理组件以及它们连接在一起时形成的网络。每个组件都有两个 Terminal
s,这些终端与 Node
s 连接,从概念上讲,我们可以在下面看到网络连接的一小部分:
Object1 100000051
100000052
Node1 400000051
Object2 100000053
100000054
Node2 400000052
在此示例中,Terminal
的 Object1
2 连接到 Node1
,同样,Terminal
的 Object2
1 连接到 Node1
。此查询/php 的目标是描述此连接性。
来自数据库的数据示例:
Object table:
ObjectID(PK) TerminalID1 TerminalID2
200000011 100000051 100000052
Node table:
NodeID(PK)
400000051
Terminal table:
TerminalID(PK) NodeID
100000052 400000051
如果我想描述连接性,我必须检查数据中的连接,到目前为止我已经:
每个 Object
有两个 Terminal
每个 Terminal
都有一个关联的 Node
ID
如果我想在一行中包含数百个相似的数据,我需要一种方法来拉动每个节点,然后拉动连接到该节点的每个组件。我觉得我在这里遗漏了一些东西,无论是在概念上还是在我的模式存在的方式上。给定正确的模式是否有办法做到这一点?我是否需要提取所有数据,然后创建一个算法来组合所有数据?
最佳答案
给定起始对象 ID,您可以获得它连接到的 ID:
SELECT t.NodeID neighbor
FROM Object AS o
JOIN Terminal AS t ON t.TerminalID = o.TerminalID1
WHERE o.ObjectID = <starting ID>
UNION
SELECT t.NodeID neighbor
FROM Object AS o
JOIN Terminal AS t ON t.TerminalID = o.TerminalID2
WHERE o.ObjectID = <starting ID>
如果您想获取所有连接节点的完整网络,则必须使用之前检索到的 ID 迭代执行此操作。确保检查重复项,否则如果存在循环,您将最终无限循环。
关于php - 构建 mysql 查询和/或 php 代码来关联不明确的数据点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21492642/