首页 > 解决方案 > MySQL:查找所有多个二级域

问题描述

我有一张桌子,上面有来自不同国家的数千个报价。一些优惠在不同国家/地区的不同域上运行。例如,supershop 为三个不同的国家/地区运行三个不同的域:

supershop.com、supershop.fr 和 supershop.nl

在我的数据库中,URL 条目可能看起来不同:

http://supershop.com
https://www.supershop.fr/home/index.php
https://supershop.nl

现在,如何选择相同 SLD(二级域名)名称的所有行?

它应该是这样的

SELECT 
    landingpage, 
    COUNT(landingpage)
FROM
    angebote
GROUP BY REGEXP "^(https?://|www\\.)[\.A-Za-z0-9\-]+\\.[a-zA-Z]{2,4}"
HAVING COUNT(landingpage) > 1

按此部分分组:[\.A-Za-z0-9\-]

任何解决方案/提示?

标签: mysqlregexgroup-by

解决方案


您可以使用REGEXP_REPLACE从每个 URL 中提取二级域,然后GROUP BY是该值:

SELECT REGEXP_REPLACE(landingpage, "^(?:https?://(?:www\\.)?)([A-Za-z0-9-]+)\\.[a-zA-Z]{2,4}(/.*)?$", "\\1") AS sld, 
       COUNT(*) AS count
FROM angebote 
GROUP BY sld

输出(用于您的样本数据)

sld         count
supershop   3

dbfiddle 上的演示

请注意,我对您的正则表达式进行了一些小的修改,以使其可以REGEXP_REPLACE用于提取二级域。


推荐阅读