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

我想做的事......

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

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

有帮助吗?

解决方案

要返回某个域的计数:

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

其他提示

如果它们是完整形成的网址,您可以先替换("“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

如果您通过域名表示TLD(因此您需要计算 www.example.com corp.example.com www.local。 example.com example.com 作为一个域),然后正则表达式将是:

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

我假设这是格式良好的URL,以 schema:// host / [path]

的形式
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top