php - 构建 mysql 查询和/或 php 代码来关联不明确的数据点

标签 php mysql sql database database-design

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

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

Object1 100000051
        100000052

Node1   400000051

Object2 100000053
        100000054

Node2   400000052

在此示例中,TerminalObject1 2 连接到 Node1 ,同样,TerminalObject2 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/

相关文章:

php - 从外部 PHP 应用程序通过基本身份验证触发 Azure WebJobs API?

mysql - mysql数据库在一定时间段内的平均时间

sql - 我可以在较大的SQL查询中只能将一列加入或将多行转换为额外的列吗?

sql - 选择等于 10 位的行

php - 具有动态分配名称的文本区域会抛出我的代码

php - 高效读取大文本文件

php - STR_TO_DATE mysql 和 php

mysql - 与 Amazon RDS MySQL & Play Framework 1.2.5(c3p0 默认设置)的连接偶尔挂起

sql - 如何在 SQL (postgres) 中按年份找到与最大资源相关的项目 ID?

php - 如何在分页中为每个页面拉取和显示范围(最小-最大)数据?