0

URLを含む列があります。一部の (すべてではない) URL が同じドメインを共有しています。例: aaa.yahoo.com、bbb.yahoo.com、ccc.yahoo.com。これらの URL は一意のフィールドに保存されます。また、同じテーブルには自動インクリメント主キーがあります。

私がする必要があり、それについて助けが必要なことは次のとおりです。同じドメイン名を共有するすべての URL を照会します。クエリに入力できる正確なドメイン名はなく、データベースで利用可能な共有ドメイン名が多数あり、それらすべてをクエリしたいことに注意してください。

編集: これは私が試したコマンドですが、SQLの経験があまりないため、まったくわかりません:

SELECT domainname FROM DB.TABLE
WHERE SUBSTRING(domainname, LOCATE('.', domainname))
IN(
    SELECT   domainname
    FROM     DB.TABLE
    GROUP BY SUBSTRING(domainname, LOCATE('.', doaminname)) 
);
4

2 に答える 2

1

私があなたを間違って理解していなければ...

SELECT
    COUNT(`domainname`) AS 'occ'
    ,SUBSTRING(`domainname`,LOCATE('.',`domainname`)+1) AS 'domain'
FROM `the_table`
GROUP BY SUBSTRING(`domainname`,LOCATE('.',`domainname`)+1)
HAVING `occ`>1
ORDER BY `occ` DESC,`domain` ASC

このHAVING...行は、テーブルに 1 回しか出現しないドメインを除外します。


編集:

あなたのコメントに代わって話す...次の例ではどれがドメインであるかを知ることができないため(国コード、ドメイン拡張子などの膨大なリストに対して値をテストしない限り)

  • domain.co.uk
  • subdomain.domain.co

プログラムでそれらを検出することはできません。拡張機能または国の拡張機能に依存することを計画している場合、それも機能しません。あなたができることは、スマートな並べ替えを取得し、目でそれらを選択することです。これは、上記の解決策に取り組まない限りです。

たとえば、

SELECT
    `id`
    ,`d` AS 'domain'
    ,IF(CHAR_LENGTH(`d`)-CHAR_LENGTH(REPLACE(`d`,'.',''))=2,
        SUBSTRING_INDEX(`d`,'.',1),'') AS 'f1'
    ,SUBSTRING_INDEX(SUBSTRING_INDEX(`d`,'.',-2),'.',1) AS 'f2'
    ,SUBSTRING_INDEX(`d`,'.',-1) AS 'f3'
FROM (
    SELECT
        `id`
        ,IF(CHAR_LENGTH(`domainname`)-CHAR_LENGTH(REPLACE(`domainname`,'.',''))>2,
            SUBSTRING_INDEX(`domainname`,'.',-3),`domainname`) AS 'd'
    FROM `the_table`
    GROUP BY `d`
) t
ORDER BY `f3`,`f2`,`f1`

見るのに役立つかもしれません。f2結果をand でグループ化できないことに注意してくださいf3

  • example1.yahoo.com
  • example2.yahoo.com

しかし、あなたも持っているかもしれません

  • yahoo.com.br
  • google.com.br
于 2012-07-30T17:46:04.727 に答える
0

LIKE オペランドを使用します。何かのようなもの:

SELECT domainname from DB.TABLE where domainname LIKE '%.yahoo.com';

yahoo.com のすべてのサブドメインが返されます。「%」は複数文字のワイルドカードです。単一文字にはアンダースコア「_」を使用してください。

于 2012-07-30T17:20:42.460 に答える