Как посчитать домены URL в MySQL? - PullRequest
2 голосов
/ 30 апреля 2009

У меня есть таблица MySQL со столбцом правильно сформированных URL. Я хотел бы получить таблицу уникальных доменных имен в столбце и количество раз, которое появляется каждый домен. Есть ли запрос MySQL, который может это сделать?

Я думал сделать что-то вроде ...

SELECT COUNT(*)
FROM log
GROUP BY url REGEXP "/* regexp here */"

... но это не работает, поскольку REGEXP возвращает 0 или 1, а не то, что было найдено.

Ответы [ 3 ]

5 голосов
/ 30 апреля 2009

Чтобы вернуть счет определенного домена:

SELECT  SUM(url REGEXP '^http://example.com')
FROM    log

К сожалению, MySQL не возвращает сопоставленную строку в регулярных выражениях.

Если ваши записи журнала всегда выглядят как http://example.com/*, вы можете ввести:

SELECT  SUBSTRING_INDEX(url, '/', 3), COUNT(*)
FROM    log
GROUP BY
        1
2 голосов
/ 30 апреля 2009

Ну, если они полностью сформированы, вы можете сначала replace("http://", "") и заменить все после первого появления /

так

http://www.domain.com/page.aspx

станет

www.domain.com

Я не уверен в синтаксисе MySQL для Replace, но в MSSQL это будет.

DECLARE @url nvarchar(50)
SET @url = 'http://www.domain.com/page.aspx'
SELECT LEFT(REPLACE(@url, 'http://', ''), CharIndex('/', REPLACE(@url, 'http://', '')) - 1)

Отсюда вы можете получить подтаблицу всех доменных имен, а затем сосчитать / сгруппировать их.

SELECT
    Count(*),
    DomainOnly
FROM
(
    SELECT 
        LEFT(REPLACE(urlColumn, 'http://', ''), CharIndex('/', REPLACE(urlColumn, 'http://', '')) - 1) as DomainOnly
    FROM 
        TABLE_OF_URLS
) as Domains
GROUP BY 
    DomainOnly
0 голосов
/ 30 апреля 2009

Если под доменом вы подразумеваете TLD (то есть вы хотите считать www.example.com, corp.example.com, www.local.example.com и example.com как один домен), тогда регулярное выражение будет:

 '[[:alnum:]-]+\.[[:alnum:]-]+/'

Я предполагаю, что это правильно сформированные URL в виде schema://host/[path]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...