0

我进入网络,所以你看到的数据是交换机/端口信息。

问题:

我只想要 SQL 查询的“ge-0/0/x”部分,我希望它按“ge-0/0/x”排序,我只想“选择不同”的“ge-0/0” /x" 部分(只有 1 个端口,如果你关注我的话)。

由于某些结果上有一些点,我发现我可以用rtrim它来摆脱它们。结果中也有一些破折号(-),因此非常感谢任何帮助摆脱它们的帮助。

PHP:

// "nodes" is the number of swithes, thus the ge-[node].
$host_name = 'switch_host_name';
$nodes = 2;
for($node=0;$node<$nodes;$node++){
    $ge = '%: ge-'.$node.'%';
    $portquery = mysql_query("SELECT service_description FROM service WHERE host_name='$host_name' AND service_description LIKE '$ge'") or die(mysql_error());
    while($portarray = mysql_fetch_array($portquery)){
        $port = substr($portarray['service_description'],8,10);
        echo '<div id="'.$port.'_'.$host_name.'">'.$port.'</div>';
    }
    echo '<br />';
}

SQL 示例:

+-------------------+----------------------------------+
| host_name         | service_description              |
+-------------------+----------------------------------+
| switch_host_name  | IF 151: ge-0/0/28.0 - Status     |
| switch_host_name  | IF 153: ge-0/0/29 - Status       |
| switch_host_name  | IF 155: ge-0/0/3 - Description   |
| switch_host_name  | IF 155: ge-0/0/3 - Status        |
| switch_host_name  | IF 155: ge-0/0/3.0 - Traffic     |
| switch_host_name  | IF 195: ge-0/0/5 - Description   |
| switch_host_name  | IF 195: ge-0/0/5 - Status        |
| switch_host_name  | IF 195: ge-0/0/5.0 - Traffic     |
+-------------------+----------------------------------+

非常感谢您可以指出我的任何线索、链接、指南、tuts。当然,解决方案会很棒!

提前致谢。

4

1 回答 1

1

如果您有许多这些记录,我建议您在将记录插入数据库时​​按摩字符串以将相关部分提取到专用数据库字段中。虽然我知道这是设备配置数据,但在字段中存储格式化数据会否定拥有关系数据库的目的,正如您所发现的那样。进行排序/过滤变得非常困难。

话虽如此,您可能可以在查询中执行一些基本的字符串操作来提取您的 ge 数据:

SELECT
    @start := LOCATE('ge-', service_description),
    @end := LOCATE(' - ', service_description),
    SUBSTR(service_description, @start, @end - @start) AS ge
FROM ...
GROUP BY ge
ORDER BY ge

这假定该字段中的每条记录只有一个ge-和一个-字符串。

于 2012-04-07T05:28:29.217 回答