我有一個格式良好的URL列的MySQL表。我希望獲得該列中唯一域名的表格以及每個域出現的次數。有沒有可以做到這一點的MySQL查詢?如何統計MySQL中的URL域?
我認爲做這樣的......
SELECT COUNT(*)
FROM log
GROUP BY url REGEXP "/* regexp here */"
...但REGEXP返回0或1,而不是他被匹配這不起作用。
我有一個格式良好的URL列的MySQL表。我希望獲得該列中唯一域名的表格以及每個域出現的次數。有沒有可以做到這一點的MySQL查詢?如何統計MySQL中的URL域?
我認爲做這樣的......
SELECT COUNT(*)
FROM log
GROUP BY url REGEXP "/* regexp here */"
...但REGEXP返回0或1,而不是他被匹配這不起作用。
要返回某個域的數:
SELECT SUM(url REGEXP '^http://example.com')
FROM log
Unfortunalely,MySQL
不返回的正則表達式匹配的字符串。
如果您的日誌紀錄總是看起來像http://example.com/*
,可以發出:
SELECT SUBSTRING_INDEX(url, '/', 3), COUNT(*)
FROM log
GROUP BY
1
那麼,如果他們是完全形成的網址,你可以先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
如果域名你的意思是TLD(因此你要算www.example.com
,corp.example.com
,www.local.example.com
和example.com
作爲一個域),則正則表達式是:
'[[:alnum:]-]+\.[[:alnum:]-]+/'
我假設這是格式正確的URL,形式爲schema://host/[path]
謝謝,這對我解決了它。 – isani 2009-04-30 14:55:19