GROUP домен из URL в MySql - PullRequest
       2

GROUP домен из URL в MySql

2 голосов
/ 28 августа 2010

У меня есть большая база данных, которая содержит много URL-адресов, много повторяющихся доменов, и я пытаюсь получить только домен. например:

http://example.com/someurl.html
http://example.com/someurl_on_the_same_domain.html
http://example.net/myurl.php
http://example.org/anotherurl.php

и я хочу получить только домены, например:

http://example.com
http://example.net
http://example.org

Мой запрос:

ВЫБРАТЬ id, site ОТ table ГРУППА BY site ЗАКАЗАТЬ ПО id DESC LIMIT 50

Мне нужно использовать регулярные выражения, я думаю, но я не MySQL гуру.

Ответы [ 5 ]

9 голосов
/ 28 августа 2010
SELECT
    SUBSTR(site, 1 , LOCATE('/', site, 8)-1)
        as OnlyDomain
    FROM table
    GROUP BY OnlyDomain
    ORDER BY id DESC LIMIT 50

[EDIT]: После запроса OP, вот обновленный ответ, который покажет правильные результаты, даже если у доменных имен нет завершающих слешей:

SELECT
    SUBSTR(site, 1 , IF(LOCATE('/', site, 8), LOCATE('/', site, 8)-1, LENGTH(site)))
        as OnlyDomain
    FROM tablename
    GROUP BY OnlyDomain
    ORDER BY id DESC LIMIT 50
6 голосов
/ 13 мая 2011
SELECT 
COUNT(*) AS nCount,
SUBSTRING_INDEX(REPLACE(REPLACE(REPLACE(site,'http://',''),'https://',''),'www.',''),'/',1) AS sDomain 
FROM tbl_table
GROUP BY sDomain 
ORDER BY 1 DESC

Аддон после растворения JQman также с www.заменил и группу на + count

1 голос
/ 29 августа 2010
SELECT id,
       SUBSTRING_INDEX(REPLACE(REPLACE(site,'http://',''),'https://',''),'/',1) as domain 
       FROM table
       GROUP BY domain 
       ORDER BY id DESC 
       LIMIT 50

Это сработало для меня, если кому-то это нужно.

1 голос
/ 28 августа 2010

Вы можете использовать замену строки. Предполагая, что столбец "site" содержит URL:

select id, 
substr(site,1,locate('/', site ,locate('//',site)+2)-1)
from table 
group by site
order by id
desc limit 50;

Будьте внимательны, чтобы убедиться, что несколько косых черт закодированы, например:

http://example.com/somethingelse/someurl.html
0 голосов
/ 28 августа 2010

Вы можете выбрать домены с помощью:

select left(site,6+locate('/',substring(site,8)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...