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

これらのレコードが多数ある場合は、レコードをDBに挿入するときに、文字列をマッサージして、関連する部分を専用のDBフィールドに抽出することをお勧めします。これはデバイス構成データであることは理解していますが、フォーマットされたデータをフィールドに格納すると、リレーショナルデータベースを使用する目的が無効になります。並べ替え/フィルタリングを行うことは非常に困難になります。

そうは言っても、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-1つだけの文字列があることを前提としています。-

于 2012-04-07T05:28:29.217 に答える