2009-04-30 37 views
2

我有一個格式良好的URL列的MySQL表。我希望獲得該列中唯一域名的表格以及每個域出現的次數。有沒有可以做到這一點的MySQL查詢?如何統計MySQL中的URL域?

我認爲做這樣的......

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

...但REGEXP返回0或1,而不是他被匹配這不起作用。

回答

5

要返回某個域的數:

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 
+0

謝謝,這對我解決了它。 – isani 2009-04-30 14:55:19

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 
0

如果域名你的意思是TLD(因此你要算www.example.comcorp.example.comwww.local.example.comexample.com作爲一個域),則正則表達式是:

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

我假設這是格式正確的URL,形式爲schema://host/[path]