从网址中选择不同的域名

时间:2018-06-01 11:46:57

标签: mysql mysqli

我想从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 :(得分:0)

根据manual,以下查询:

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

返回:

'www.mysql'

,而:

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

返回:

'mysql'

因此,如果网址中有总是两个. ,并且在它们之间有域名,那么您可以使用:

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

Demo here

答案 1 :(得分:0)

查询已更新,等待您的回复。

Manual Link

注意如果您只想在结果集中使用唯一的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所以正则表达式只有一点点的转义有轻微变化\。

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

Regular expression visualization

Debuggex Demo