我有一个访问者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);
答案 0 :(得分:1)
SELECT
Count(Distinct country) As country_number
, country
FROM the_ips
GROUP BY country
LIMIT 100
尝试这个开始
答案 1 :(得分:0)
对于其他寻找删除重复条目的确切方法的人来说,就是这样。假设您的副本位于“名称”列中。只需将'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']."");
}
注意:这将删除所选的结果,如果您不确定,请务必备份数据,然后再处理任何DELETE查询。
我希望这会有所帮助:)