不确定这是否可行。有两张表,一张是国家代码:
例如
id | code | country
1 .us United States
2 .ru Russia
依此类推(大约200+行)
另一个是 URL:
http//:example.gov.us
http://example.gov.ru/index.php
http://xyz.gov.us/test.html
等等。
我不知道会出现什么网址,因此我必须获取每个国家/地区代码,并以某种方式查询网址以查找与国家/地区代码相匹配的任何匹配项,并计算每个国家/地区代码有多少个匹配项。
例如(?)
gov.[country code]
理想情况下,我希望输出按国家/地区名称进行分组并进行计数,例如使用上面的 URL 作为示例,可能会导致:
country | total
United States | 2
Russia | 1
就像我说的,不确定这是否可以在 MySQL 中使用正则表达式、子字符串等来完成。很想知道是否可以。
最佳答案
您可以使用如下查询:
SELECT
c.country,
COUNT(*)
FROM
countries c INNER JOIN URLS u
ON SUBSTRING_INDEX(SUBSTRING_INDEX(url, 'http://', -1), '/', 1)
LIKE CONCAT('%', c.code)
GROUP BY
c.country
请参阅 fiddle here .
使用 SUBSTRING_INDEX(url, 'http://', -1)
您可以获取 http://之后的整个字符串
http://example.gov.ru/index.php ---> example.gov.ru/index.php
然后在此字符串上使用SUBSTRING_INDEX(..., '/', 1)
,您可以获取第一个/之前的字符串部分,或者如果没有/则获取整个字符串
example.gov.ru/index.php ---> example.gov.ru
然后您可以检查 example.gov.ru 是否类似于“%.ru”
关于MySQL查询: use each result/row to regex and count another table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16491975/