выбрать разные домены из URL - PullRequest
0 голосов
/ 01 июня 2018

Я хочу получить отдельные домены из поля URL.Вот моя таблица

url
id url
1  www.goal.com
2  www.goal.com/liverpool
3  www.mirror.com
4  www.mirror.com/i-want-cars

Ожидаемый результат должен быть

  id domain
    1 goal
    2 mirror

Как я могу это сделать - это то, что я пытаюсь,

SELECT DISTINCT (REPLACE(SUBSTRING_INDEX(REPLACE(url, 'www.', ''), '/', 3), 'http://', '')) AS domain, 
    url 
  FROM `url_tbl` ORDER BY `id` DESC

Не работаетдля меня.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Запрос обновлен в ожидании вашего ответа.

Ручная ссылка

ПРИМЕЧАНИЕ если вы хотите, чтобы в наборе результатов были только уникальные domainName,удалите , 'url' as 'Real URL' эту часть из запроса.Второе изображение - это желаемый результат.

Если ваша версия сервера mysql 8, попробуйте это, смотрите выходное изображение, и я надеюсь, что это решит вашу проблему.

select   distinct REGEXP_REPLACE( REGEXP_REPLACE(url,'^(https://www\\.|http://www\\.|www\\.|http:\//|https:\//)','') , '(.com)(\/(.*))*' , '') as 'Domain', `url`.`url` as 'Real URL' from url ;

OUTPUT

DISTINCT RESULT SET

Отметьте здесь также , просто чтобы получить представление


НЕТ MYSQL ДЛЯ РЕГУЛЯРНОГО ВЫРАЖЕНИЯ ВКЛDEBUGGEX, поэтому Regex имеет небольшие изменения в экранировании только одной точки \.

^(https://www\.|http://www\.|www\.|http:\//|https:\//)

Regular expression visualization

Демонстрация Debuggex

0 голосов
/ 01 июня 2018

Согласно инструкции следующий запрос:

SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);

возвращает:

'www.mysql'

, тогда как:

SELECT SUBSTRING_INDEX('www.mysql', '.', -1)

возвращает:

'mysql'

Итак, если внутри URL есть всегда два . с именем домена между ними, вы можете использовать:

SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(url, '.', 2), '.', -1)
FROM url_tbl

Демо здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...