如何从多个MySQL表中获取信息?

如何从多个MySQL表中获取信息?,mysql,Mysql,我正在研究一种跟踪多个机架中服务器/交换机之间物理连接的方法。我设置了我的数据库,如下所示: mysql> show tables; +----------------------+ | Tables_in_System | +----------------------+ | connections | | racks | | servers | +----------------------+ mysq

我正在研究一种跟踪多个机架中服务器/交换机之间物理连接的方法。我设置了我的数据库,如下所示:

mysql> show tables;
+----------------------+
| Tables_in_System     |
+----------------------+
| connections          |
| racks                |
| servers              |
+----------------------+

mysql> select * from racks; 
+----+-------------+-------------+----------+
| id | rack_number | rack_height | location |
+----+-------------+-------------+----------+
|  2 |        7430 |          43 | xxx      |
|  3 |        7431 |          43 | xxx      |
|  4 |        7432 |          43 | xxx      |
+----+-------------+-------------+----------+

mysql> select * from servers;
+----+-------------+---------------+-----------------+---------------+
| id | server_type | rack_location | server_unit_loc | server_height |
+----+-------------+---------------+-----------------+---------------+
|  1 | Server 1    |          7430 |               2 |             3 |
|  2 | Cisco 2960  |          7431 |               1 |             1 |
|  3 | Server 2    |          7431 |               9 |             1 |
| 15 | Server 3    |          7432 |              27 |             2 |
| 16 | Cisco 2248  |          7432 |              29 |             1 |
+----+-------------+---------------+-----------------+---------------+
机架位置指第一个表中编号的机架。 服务器单元位置是服务器在机架中的位置,1为顶部,43为底部。服务器的高度就是服务器的高度

机架id(我现在意识到这些可能毫无意义……服务器id 1和2是服务器表中的id。端口1和2与电缆插入的插孔相关。这是我们使用的内部系统,因此
J01
表示它是服务器上的第一个插孔,并插入连接服务器上的第八个(
J08
)端口


这里的最终目标是能够快速查看有多少服务器连接到任何选定的服务器,以及有关该连接信息的详细信息。在本例中,我将Cisco 2960连接到不同机架中的多台服务器

+我必须输入什么样的查询才能返回连接到Cisco的所有服务器(2)。我希望能够只指定服务器id#,它将转到不同的表,并获得所有信息,例如它所在的机架、类型和服务器的高度

Cisco2960 7430 A01 J01 --> Server1 7430 A02 J08 "RJ-45" 
Cisco2960 7430 A01 J03 --> Server2 7431 A09 J08 "RJ-45"
Cisco2960 7430 A01 J02 --> Server3 7432 A27 J09 "SFP+"
像这样的事^


谢谢!另外,如果您对如何实现这一点有更好的想法,我希望听到每个人的想法。

您需要创建一个将相关信息连接在一起的查询

将标签S想象为(源服务器)。标签T正在(目标服务器)


我同意其中一条评论。您可以正常化(删除一些冗余的机架信息)。

1。再次看到正常化。然后看连接。
Cisco2960 7430 A01 J01 --> Server1 7430 A02 J08 "RJ-45" 
Cisco2960 7430 A01 J03 --> Server2 7431 A09 J08 "RJ-45"
Cisco2960 7430 A01 J02 --> Server3 7432 A27 J09 "SFP+"
SELECT S.server_type, S.rack_location, CONCAT('A0',S.server_unit_loc), B.port_s1,T.server_type, T.rack_location, CONCAT('A0',T.server_unit_loc), B.port_s2,B.cable_type  FROM servers S 
JOIN connections B ON B.server_id1 = S.id
JOIN servers T ON B.server_id2 = T.ID
WHERE S.id = 2