2009-04-30 10 views
2

Ich habe eine MySQL-Tabelle mit einer Spalte wohlgeformter URLs. Ich möchte eine Tabelle mit den eindeutigen Domänennamen in der Spalte und der Häufigkeit, mit der jede Domäne angezeigt wird, erhalten. Gibt es eine MySQL-Abfrage, die das kann?Wie zählen URL-Domains in MySQL?

dachte ich an, etwas zu tun ...

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

... aber das funktioniert nicht wie REGEXP 0 oder 1 zurückkehrt und nicht das, was abgestimmt wurde.

Antwort

5

Zur Zählung einer bestimmten Domäne zurück:

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

Unfortunalely, MySQL nicht die angepassten String auf regexps zurückgibt.

Wenn Ihre Log-Einträge immer wie http://example.com/* aussehen, können Sie ausgeben:

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

Danke, das hat es für mich gelöst. – isani

2

Nun, wenn sie voll ausgebildet Urls sind, könnten Sie zunächst replace("http://", "") und ersetzen alles nach dem ersten Auftreten eines /

so

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

würde

www.domain.com 

Ich bin nicht sicher von der MySQL-Syntax für Ersetzen, aber in MSSQL wäre es.

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

Von diesem können Sie eine Untertabelle aller Domain-Namen erhalten und sie dann zählen/gruppieren.

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

Wenn von Domain, die Sie TLD bedeuten (also würden Sie wollen www.example.com, zählen corp.example.com, www.local.example.com und example.com als eine Domäne), dann wäre der regexp sein:

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

Ich bin angenommen, dass dies wohlgeformte URLs sind, in Form von schema://host/[path]