0

我有一个访问者 IP 的 mysql 数据库,我正在尝试创建一个 HTML 表,显示这些 IP 中有多少来自 X 国家/地区。我可以获得显示访问者来自哪个国家/地区的脚本,但我似乎无法找到一种方法来分组而不是逐行显示它。

例如,目前我得到:

Country | Visitors
------------------
US      | Array
UK      | Array
UK      | Array
UK      | Array
US      | Array
MX      | Array
MX      | Array

我想要的是:

Country | Visitors
------------------
US      | 2 Visitors
UK      | 3 Visitors
MX      | 2 Visitors

我试过array_count_values了,但它仍然逐行列出每个访问者,并为每一行分配一个“数组”值。

IP 位于数据库中,脚本提取 IP,然后根据单独文件中的数据为 IP 分配国家代码值。

这是我用我的业余技能破解的。如果有更好的方法来实现这一点,欢迎提出建议!

require_once("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);


include_once($_SERVER['DOCUMENT_ROOT'] . 'connect.php'); 

/* Performing SQL query */
 $data = mysql_query("SELECT * FROM the_ips LIMIT 100")
 or die(mysql_error());

 echo "<table>";
 echo "<td><strong>Country</strong></td><td><strong>Visitors</strong></td></tr>";

 while($info = mysql_fetch_array( $data ))
     {
      $ip = $info['ip_address'];
      $country_code = geoip_country_code_by_addr($gi, $ip);
      $countrylist = array($country_code);
      $frequency = array_count_values($countrylist);

      echo "<tr><td style='width: 100px;'>".$country_code."</td><td style='width: 100px;'>".$frequency."</td></tr>";
     }
 echo "</table>";
 geoip_close($gi);
4

2 回答 2

1
SELECT
     Count(Distinct country) As country_number
   , country
 FROM the_ips
 GROUP BY country
 LIMIT 100

试试这个

于 2013-02-26T21:49:27.237 回答
0

对于寻找删除重复条目的确切方法的其他人,这里是。假设您的重复项位于“名称”列中。只需将“名称”和“ID”更改为您的表格各自的列名。

// Select duplicate entries
$result = mysql_query("SELECT id, name
                       FROM tble_name
                       GROUP BY name
                       HAVING COUNT(*) > 1");
// Loop through the results
while($rows=mysql_fetch_assoc($result)){
// Delete each row by id
          mysql_query("DELETE FROM tble_name
          WHERE id = ".$rows['id']."");
}

注意:这将永久删除选定的结果,如果您不确定,请务必在弄乱任何 DELETE 查询之前备份您的数据。

我希望这有帮助 :)

于 2013-11-12T06:51:13.213 回答