0

これが可能かどうかはわかりません。2 つのテーブルがあり、1 つは国コードです。

例えば

id | code | country

1    .us    United States
2    .ru    Russia

など(約200行以上)

もう 1 つは URL です。

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

等々。

どの 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 に答える