【问题标题】:PHP trimming and SQL query with LIKE and sorting使用 LIKE 和排序进行 PHP 修剪和 SQL 查询
【发布时间】:2012-04-07 03:46:57
【问题描述】:

我对网络很感兴趣,所以您看到的数据是交换机/端口信息。

问题:

我只想要 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。 当然有一个解决方案会很棒!

提前致谢。

【问题讨论】:

    标签: php mysql network-programming network-monitoring


    【解决方案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- 和一个 - 字符串。

    【讨论】:

    • 谢谢,效果很好!只有一件事,结果仅按 ge-0/0/x 中的第一个数字 x 排序。例如:ge-0/0/1 到 ge-0/0/19 在 ge-0/0/2 之前。有什么解决办法吗?
    • 不是真的,除非您进一步拆分组件。由于/ 字符,它被排序为字符串。因此,我建议将各个位按摩到自己专用的适合类型的字段中。
    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 2012-08-11
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2012-05-11
    • 1970-01-01
    相关资源
    最近更新 更多