MySQL:查找所有多个二级域

标签 mysql regex group-by

我的 table 上有来自不同国家的数千个优惠。有些优惠在不同国家/地区的不同域上运行。例如,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\-]

有什么解决方案/提示吗?

最佳答案

您可以使用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

Demo on dbfiddle

请注意,我对您的正则表达式进行了一些细微修改,使其与 REGEXP_REPLACE 一起提取二级域。

关于MySQL:查找所有多个二级域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59184970/

相关文章:

mysql - Cpanel:#1227 - 访问被拒绝;您需要(至少其中一项)此操作的 SUPER 权限

mysql - 如何通过连接mysql中的两个表来更新

php - 为什么 PHP 代码在 HTML 之前执行?

c posix 正则表达式验证输入 HH :MM:SS time string

regex - Fiddler 自动回复 + 正则表达式

c# - linq.js GroupBy 在多列上使用 Sum

mysql - 使用 MYSQL 中的 GROUP BY 计算状态列上的 id 计数以及特定行计数的总和

mysql - 选择包含每天最大值的整行

java - 多个词不被搜索,不占用空间

c - 使用正则表达式解析 CREATE TABLE sql