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

时间:2016-02-26 17:58:29

标签: mysql

我正致力于跟踪多个机架中服务器/交换机之间的物理连接。我设置了我的数据库,就像这样:

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 |
+----+-------------+---------------+-----------------+---------------+
  

rack_location 是指第一个表中的编号机架。    server_unit_loc 是服务器在机架中的位置,1是顶部,43是底部。 server_height 就是服务器的高度。

mysql> select * from connections;
+----+----------+----------+------------+------------+---------+---------+------------+
| id | rack_id1 | rack_id2 | server_id1 | server_id2 | port_s1 | port_s2 | cable_type |
+----+----------+----------+------------+------------+---------+---------+------------+
|  1 |     7430 |     7430 |          2 |          1 | J01     | J08     | RJ-45      |
|  2 |     7430 |     7431 |          2 |          3 | J03     | J08     | RJ-45      |
|  3 |     7430 |     7432 |          2 |         15 | J02     | J09     | SFP+       |
+----+----------+----------+------------+------------+---------+---------+------------+
  再次

rack_id (我现在意识到这些可能毫无意义......) server_id1& 2 服务器表中的ID。 ports_1& 2与插入电缆的插孔相关。这是我们使用的内部系统,因此J01表示它是服务器上的第一个插孔,它插入第8个插孔( {{1连接服务器上的端口。

此处的最终目标是能够快速查看连接到任何所选服务器的服务器数量以及有关该连接信息的详细信息。在此示例中,我将Cisco 2960连接到不同机架中的多个服务器。

+我必须输入什么样的查询才能返回连接到 Cisco (2)的所有服务器。我希望能够只指定 server_id#,它会转到不同的表格并获取所有信息,例如 rack 所在的信息,它是输入,以及服务器的高度

J08
  

这样的东西...... ^

谢谢!此外,如果你更了解如何实现这一目标,我很乐意听到每个人的想法。

1 个答案:

答案 0 :(得分:0)

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

将标签S视为(源服务器)。标签T是(目标服务器)。

实施例

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

我同意其中一条评论。你可以规范化事物(摆脱一些冗余的机架信息)。