构造一个mysql查询和/或php代码来关联不明确的数据点
我不确定我要的是一个特定的查询还是能够解决这个问题的php代码,也许我要的是一个应用程序。我会尽力解释情况的 想象一系列真实世界的物理组件以及它们连接在一起时形成的网络。每个组件都有两个终端,这些终端与节点相连,从概念上我们可以在下面看到网络连接的一小部分:构造一个mysql查询和/或php代码来关联不明确的数据点,php,mysql,sql,database,database-design,Php,Mysql,Sql,Database,Database Design,我不确定我要的是一个特定的查询还是能够解决这个问题的php代码,也许我要的是一个应用程序。我会尽力解释情况的 想象一系列真实世界的物理组件以及它们连接在一起时形成的网络。每个组件都有两个终端,这些终端与节点相连,从概念上我们可以在下面看到网络连接的一小部分: Object1 100000051 100000052 Node1 400000051 Object2 100000053 100000054 Node2 400000052 在本例中,Obj
Object1 100000051
100000052
Node1 400000051
Object2 100000053
100000054
Node2 400000052
在本例中,Object1的终端2连接到Node1,同样,Object2的终端1连接到Node1。这个query/php的目标是描述这种连接性
数据库中的数据示例:
Object table:
ObjectID(PK) TerminalID1 TerminalID2
200000011 100000051 100000052
Node table:
NodeID(PK)
400000051
Terminal table:
TerminalID(PK) NodeID
100000052 400000051
如果我想描述连接性,我必须检查数据中的连接,到目前为止我有:
每个对象有两个端子
每个终端都有一个关联的节点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以迭代方式执行此操作。确保检查重复项,否则如果存在循环,您将无限循环
SELECT Terminal.NodeID, Object.ObjectID, Object.TerminalID1, Object.TerminalID2
FROM Terminal
INNER JOIN Object
ON Terminal.TerminalID=Object.TerminalID2
这会让你找到你想要的。
我不完全确定它对重复项会有什么反应,因此您可能希望添加一个独特的,但我认为这是一个简单的方法来完成它这里的快速问题…这是否取决于对象、节点或终端ID的任何顺序?我这样问是因为在某些情况下,ID不是有序的,只是分散的。我也会问你同样的问题,所以…这是否取决于对象、节点或终端ID的顺序?我这样问是因为在某些情况下ID不整齐,只是分散。不,不需要排序,只要终端中有一行带有终端ID和相应节点ID,一切都会正常工作