来自MySql中url的GROUP域

时间:2010-08-28 13:30:21

标签: sql mysql regex

我有一个包含许多网址的大型数据库,有许多网域正在重复,而我正试图只获取域名。 例如:

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

我的查询是:

  

选择idsite FROM table GROUP   BY site ORDER BY id DESC LIMIT 50

我需要使用正则表达式我想但我不是mysql guru。

5 个答案:

答案 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)))