Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:计数重复项并删除重复行_Php_Mysql - Fatal编程技术网

PHP:计数重复项并删除重复行

PHP:计数重复项并删除重复行,php,mysql,Php,Mysql,我有一个访问IP的mysql数据库,我正在尝试创建一个HTML表,显示其中有多少IP来自X国家。我可以让脚本显示访客来自哪个国家,但我似乎找不到一种方法来分组显示,而不是逐行显示 例如,目前我得到: Country | Visitors ------------------ US | Array UK | Array UK | Array UK | Array US | Array MX | Array MX | Array

我有一个访问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\u count\u值,但它仍然按行列出每个访问者,并为每行分配一个array值

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);

请尝试此方法作为开始

对于其他正在寻找删除重复项的确切方法的人,请看这里。假设您的副本在“名称”列中。只需将“name”和“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']."");
}
注意:这将永久删除所选结果,如果不确定,请确保在处理任何删除查询之前备份数据


我希望这有帮助:

如果美国和MX引用国家,然后计算行数,为什么不尝试按国家分组行?您不应该使用echo html代码;,使用此:?>此处的html代码输出单个变量Yes mariosk89、US、MX是国家代码。我试试看。谢谢你的html提示,帕查。谢谢。我该怎么做呢?我试图替换上面代码中的内容,并在“字段列表”中获得未知列“Country”。显然,您将使用自己的变量更改change Country和Country_number。我发布的代码只是一个使用变量的示例,这些变量是根据我对您的问题的理解命名的
// 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']."");
}