我有一个包含许多网址的大型数据库,有许多网域正在重复,而我正试图只获取域名。 例如:
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
FROMtable
GROUP BYsite
ORDER BYid
DESC LIMIT 50
我需要使用正则表达式我想但我不是mysql guru。
答案 0 :(得分:9)
SELECT
SUBSTR(site, 1 , LOCATE('/', site, 8)-1)
as OnlyDomain
FROM table
GROUP BY OnlyDomain
ORDER BY id DESC LIMIT 50
[编辑]:在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
答案 1 :(得分:6)
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.on。替换和分组+计数
答案 2 :(得分:1)
您可以使用字符串替换。假设“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
答案 3 :(得分:1)
SELECT id,
SUBSTRING_INDEX(REPLACE(REPLACE(site,'http://',''),'https://',''),'/',1) as domain
FROM table
GROUP BY domain
ORDER BY id DESC
LIMIT 50
如果有人需要,那对我有用。
答案 4 :(得分:0)
您可以选择以下域名:
select left(site,6+locate('/',substring(site,8)))