0

不确定这是否可能。有两张表,一张是国家代码:

例如

id | code | country

1    .us    United States
2    .ru    Russia

依此类推(大约 200+ 行)

另一个是网址:

http//:example.gov.us
http://example.gov.ru/index.php
http://xyz.gov.us/test.html

等等。

我不知道会输入哪些 URL,因此我必须获取每个国家/地区代码并以某种方式查询 URL 以查找与国家/地区代码匹配的任何 URL,并计算每个国家/地区代码的数量。

例如(?)

gov.[country code]

理想情况下,我希望输出按国家/地区名称分组并进行计数,例如,使用上面的 URL 作为示例,它可能会导致:

country | total

United States | 2
Russia  | 1

就像我说的,不确定这是否可以在 MySQL 中使用正则表达式、子字符串等来完成。很想知道是否可以。

4

2 回答 2

1

您可以使用这样的查询:

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

在此处查看小提琴。

使用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 LIKE '%.ru'

于 2013-05-10T23:21:51.700 回答
0
select country, count(*) total
from country_codes c
join urls on urls.url RLIKE CONCAT("^http://[^/]+\\.gov\\.", c.code, "($|/)")
group by county
于 2013-05-10T23:25:11.137 回答