我有一张桌子,上面有来自不同国家的数千个报价。某些优惠在不同国家/地区的不同域上运行。例如,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 - MySQL:查找所有多个二级域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59184970/

10-12 18:09