我如何在MySQL中仅选择某个国家/地区的用户,基于他们的IP?

我如何在MySQL中仅选择某个国家/地区的用户,基于他们的IP?,mysql,select,filter,ip,Mysql,Select,Filter,Ip,我通过查询mysql来分析来自不同国家的用户,但我现在只对分析来自加拿大的用户和来自其他国家的用户感兴趣。我有他们的ip(他们是手机游戏玩家,他们玩我们的游戏),但我不知道如何根据国家筛选他们…你能帮忙吗?简单地说,在所有情况下,你都需要加拿大的ip。。但是,即使您有数据库解决方案来检查特定范围内的IP,或者不消耗时间 您可以使用的服务(API)太多;到目前为止,对我来说最好的是,他们有一个免费和付费的版本,这取决于你想要多少细节 选择要使用的API后,在表中添加一列call it countr

我通过查询mysql来分析来自不同国家的用户,但我现在只对分析来自加拿大的用户和来自其他国家的用户感兴趣。我有他们的ip(他们是手机游戏玩家,他们玩我们的游戏),但我不知道如何根据国家筛选他们…你能帮忙吗?

简单地说,在所有情况下,你都需要加拿大的ip。。但是,即使您有数据库解决方案来检查特定范围内的IP,或者不消耗时间

您可以使用的服务(API)太多;到目前为止,对我来说最好的是,他们有一个免费和付费的版本,这取决于你想要多少细节

选择要使用的API后,在表中添加一列call it country并使用API根据IP地址进行更新。。这样,您将执行一个简单的查询并按国家进行筛选

在我前面提到的例子中,我正在使用maxmind,并使用perl来实现这一点

使用Perl的简单示例:

use 5.014;
use DBI;
use Geo::IP;    
#sudo apt-get install libgeo-ip-perl (then) sudo cpanm Geo::IP

my $table   = 'Gamers';
my $country;

#Connect to you database
my $dbh_s   = DBI->connect(Database(), User(), Pass()) or die($DBI::errstr);

#select the id and IPs of the gamers
my $sth_m   = $dbh_s->prepare("SELECT id, request_ip FROM $table WHERE request_ip IS NOT NULL AND country = '0'"); 
$sth_m->execute();
my $rows    = $sth_m->fetchall_arrayref; die("\n") unless ($rows);

# prepare the query to update the country
my $sth_u   = $dbh_s->prepare("UPDATE $table SET country = ?, updated_time = now() WHERE id = ?");

# here you can use the specific .dat you took from the maxmind
my $gi      = Geo::IP->open("/usr/local/share/GeoIP/GeoIP.dat", GEOIP_STANDARD ) or die ("Can't init Geo\n");

# Do the magic (Take every IP and check which coutry)
foreach my $row (@{$rows}) { 

    # I am not filtering IPv6 here so I just send them to US
    if (@$row[2] =~ ':')    { $country = 'US'; } #IPv6
    # The lite free database don't all details sometimes some IPs don't exsit to I just ignore them and mark them by 'WW'
    else                    { $country = $gi->country_code_by_addr(@$row[2]) || 'WW'; }

    $sth_u->execute($country, @$row[0]);
}

# close the connection to the databse
$dbh_s->disconnect;

您可以将此脚本放入cron中,每小时或每天执行一次。。然后只需
从国家='CA'的玩家中选择玩家

这里只是猜测,但您可以对此进行爬网:然后将范围放在一个表中,然后将您拥有的数据与此数据进行比较。这样做似乎需要几年时间……有一些API将返回IP的位置。这不是傻瓜式的,但它相当准确。通过IPHere搜索地理位置是加拿大的IP范围,希望这有帮助。看看这个。他们有一个使用JSON的ip到国家的API。您可以在服务器端使用CURL调用它,根据IP地址获取国家/地区。