3

ドメイン名のリストと説明を含むテーブルがあります。

ドメイン名の表記を逆にして、より自然な並べ替え順序(個人的な意見)で使用するために、単純な関数(可能な場合はネイティブ関数)を使用したいと思います。

たとえば、次のデータを左から右に変換したいとします。

admin.test.example.com => com.example.test.admin
api.test.example.com => com.example.test.api
cdn.test.example.com => com.example.test.cdn
test.example.com => com.example.test
admin.staging.example.com => com.example.staging.admin
api.staging.example.com => com.example.staging.api
cdn.staging.example.com => com.example.staging.cdn
staging.example.com => com.example.staging

PHPでこれを行うには、次のような簡単なことを行うことができます。

$rev_domain = implode('.', array_reverse(explode('.', $domain)));

これはSQLで簡単に可能ですか?(SQL標準への準拠、拡張機能が必要な場合はMySQL、両方を知っている場合は両方を優先します)。

明らかに別のオプションは、逆のDNS名を含む新しい列を作成して維持することですが、クエリでオンザフライで使用できるものを探しています。

前もって感謝します!

編集:サブドメインパーツの任意の数で機能するソリューションを探しています。例:example.comと1.2.3.4.5.6.7.8.9.0.example.com

4

2 に答える 2

4

これを試して:

CREATE FUNCTION reverse_dns (s CHAR(255))
RETURNS CHAR(255) DETERMINISTIC
BEGIN
    DECLARE i, j INT;
    DECLARE r CHAR(255);
    SET j = LOCATE('.', s, 1);
    IF j = 0 THEN
        RETURN s;
    END IF;
    SET r = LEFT(s, j - 1);
    SET i = j + 1;
    LOOP
        SET j = LOCATE('.', s, i);
        IF j = 0 THEN
            SET r = CONCAT(RIGHT(s, LENGTH(s) - i + 1), '.', r);
            RETURN r;
        END IF;
        SET r = CONCAT(SUBSTRING(s, i, j - i), '.', r);
        SET i = j + 1;
    END LOOP;
END;
于 2012-11-12T16:20:23.640 に答える
0

特にきれいではありませんが、次のようなことができます。

select concat(left(substring_index(concat(val, '.'), '.', -2),
                   locate('.', substring_index(concat(val, '.'), '.', -2))
                  ),
              left(substring_index(concat(val, '.'), '.', -3),
                   locate('.', substring_index(concat(val, '.'), '.', -3))
                  ),
              left(substring_index(concat(val, '.'), '.', -4),
                   locate('.', substring_index(concat(val, '.'), '.', -4))
                  ),
              left(substring_index(concat(val, '.'), '.', -5),
                   locate('.', substring_index(concat(val, '.'), '.', -5))-1
                  )
             )

MySQL の強みの 1 つは、優れた文字列関数を備えていることです。substring_index もその 1 つです。

于 2012-11-12T15:44:12.600 に答える