MySQL查询: use each result/row to regex and count another table

标签 mysql regex count

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

例如

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/

相关文章:

php - 内联声明 MySQL 'unknown column'

SQL - 如何显示同龄学生?

mysql - 无法在 Windows 10 上的 MySQL 8.x 中设置 lower_case_table_names

regex - 从文件名和路径解析日期和时间

python - 匹配字符串中多个选项中的第一个子字符串选项

mysql - 计算特定日期之间的用户数

mysql - 在 Yii 中设置时区

mysql - 无法在docker容器中安装mysql-client

java - 如何匹配字符串中任意位置的非单词字符?

Mysql select count on left join with condition not working 条件不工作