【问题标题】:MySQL: Find all multiple second level domainsMySQL:查找所有多个二级域
【发布时间】:2019-12-04 21:35:07
【问题描述】:

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

任何解决方案/提示?

【问题讨论】:

  • 您使用的是哪个版本的 MySQL?
  • 我使用的是 10.3.15-MariaDB-1 - Debian 10。
  • foo.comfoo.co.uk 怎么样?

标签: mysql regex group-by


【解决方案1】:

您可以使用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 一起使用以提取二级域。

【讨论】:

  • 谢谢,就是这样!只需添加HAVING count > 1 即可按预期工作!
  • @Dong3000 很高兴听到。我很高兴能帮上忙。
猜你喜欢
  • 2010-11-30
  • 1970-01-01
  • 2017-05-03
  • 2012-10-08
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 2012-12-24
相关资源
最近更新 更多