2013-02-26 50 views
0

我有一個訪問IP的MySQL數據庫,我試圖創建一個HTML表格,顯示有多少這些IP來自X國家。我可以通過腳本來顯示訪問者來自哪個國家,但我似乎無法找到一種方式將其分組顯示,而不是逐行顯示。PHP:計數重複和刪除重複行

例如,目前我得到:

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

爲什麼don'y按國家(如美國和MX是指國家),然後計算行土特產品嚐試組行? – mariosk89 2013-02-26 21:47:24

+0

你不應該使用'echo'html-code「;',在這裏使用這個:<?> html代碼<?php',結束PHP標籤並在完成輸出html時再次啓動它們。使用'<?= $ variable?>'輸出單個變量 – Pacha 2013-02-26 21:47:30

+0

是mariosk89,US,MX是國家代碼。我會嘗試的。感謝您的提示太Pacha。 – user1373779 2013-02-26 22:05:20

回答

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

試試這個一開始

+0

謝謝。我將如何完全做到這一點?我嘗試在上面的代碼中替換您的代碼,並在「字段列表」中獲取「未知列'國家/地區'」 – user1373779 2013-02-26 22:12:38

+0

顯然,您將使用自己的變量更改「country」和「country_number」的更改。我發佈的代碼只是一個使用以我自己的理解問題命名的變量的例子 – mariosk89 2013-02-27 19:44:14

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'].""); 
} 

注:這將與任何刪除查詢搞亂如果你不確定之前刪除選定的結果爲好,一定要備份您的數據。

我希望這有助於:)