如何统计MySQL中的URL域?

时间:2009-04-30 10:37:35

标签: mysql regex url

我有一个MySQL表,其中包含一列格式正确的URL。我想获得列中唯一域名的表格,以及每个域名出现的次数。是否有可以执行此操作的MySQL查询?

我想做的事......

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

...但这不起作用,因为REGEXP返回0或1而不是匹配的内容。

3 个答案:

答案 0 :(得分:5)

要返回某个域的计数:

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

不幸的是,MySQL没有在regexp上返回匹配的字符串。

如果您的日志记录始终如http://example.com/*,则可以发出:

SELECT  SUBSTRING_INDEX(url, '/', 3), COUNT(*)
FROM    log
GROUP BY
        1

答案 1 :(得分:2)

如果它们是完整形成的网址,您可以先replace("http://", "")并在/

第一次出现后替换所有内容

所以

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

会变成

www.domain.com

我不确定替换的MySQL语法,但在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

答案 2 :(得分:0)

如果您通过域名表示TLD(因此您希望将www.example.comcorp.example.comwww.local.example.comexample.com统计为一个域,那么正则表达式会是:

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

我假设这是格式良好的网址,格式为schema://host/[path]