Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
构造一个mysql查询和/或php代码来关联不明确的数据点_Php_Mysql_Sql_Database_Database Design - Fatal编程技术网

构造一个mysql查询和/或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

我不确定我要的是一个特定的查询还是能够解决这个问题的php代码,也许我要的是一个应用程序。我会尽力解释情况的

想象一系列真实世界的物理组件以及它们连接在一起时形成的网络。每个组件都有两个终端,这些终端与节点相连,从概念上我们可以在下面看到网络连接的一小部分:

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,一切都会正常工作