2012-03-21 130 views
0

在我的一個網站上,我將所有訪問者和他們的國家代碼記錄在MySQL表中。如何將此MySQL數據轉換爲此XML字符串(PHP)?

爲簡單起見,我們只是說這個表的列是「IP」和「國家」。所以我有一個來自幾個不同國家的大量遊客。

出於顯示的目的,我需要把這些數據轉換成XML格式字符串是這樣的:

<set label='US' value='17'/> 
<set label='FR' value='12'/> 
<set label='GB' value='18'/> 
<set label='AU' value='8' /> 

其中值=「」是多少訪問者是來自那個國家。我希望字符串包含表中的所有國家/地區。我想我能做到這一點

一個辦法是用某國來計算所有的行,例如:

$query = mysql_query("SELECT * FROM visitors WHERE country='US'"); 
$string.="<set label='US' value='".mysql_num_rows($query)."'/>"; 

$query = mysql_query("SELECT * FROM visitors WHERE country='FR'"); 
$string.="<set label='FR' value='".mysql_num_rows($query)."'/>"; 

$query = mysql_query("SELECT * FROM visitors WHERE country='DE'"); 
$string.="<set label='DE' value='".mysql_num_rows($query)."'/>"; 

的問題,我很快就意識到,是我的客人是從數百個不同的國家和這真是凌亂!此外,我可能會錯過某個來自未來的國家。

是不是有一個更簡單的方法來做到這一點?也許有一個特殊的陣列和foreach什麼的...

謝謝你的幫助!

回答

0

試試這個SQL查詢:

SELECT country, COUNT(country) FROM visitors GROUP BY country; 

完整的PHP部分將是:

$sql = mysql_query("SELECT country, COUNT(country) FROM visitors GROUP BY country;"); 
while($row = mysql_fetch_array($sql)) 
{ 
    echo "<set label='{$row[0]}' value='{$row[1]}'/>"; 
} 
+0

好嗎謝謝...這是什麼樣的輸出會給我嗎?我應該將查詢轉換爲數組嗎?編輯 – hellohellosharp 2012-03-21 03:37:20

+0

@ user1019588以顯示完整的PHP片段。 – hjpotter92 2012-03-21 03:40:32

+0

謝謝!正是我在找:) – hellohellosharp 2012-03-21 04:12:55

0
$string=array(); 
$query = mysql_query("SELECT country, COUNT(*) AS num FROM visitors GROUP BY country"); 
while (true) { 
    $row=mysql_fetch_array($query); 
    if (!$row) break; 
    $string[]=sprintf('<set label='%s' value='%d'/>',$row['country'],$row['num']); 
} 
$string=implode("\n",$string); 
1

事情是這樣的:

$query = mysql_query("SELECT country, count(id) as usercount FROM visitors group by country;"); 
$fmt = "<set label='%s' value='%s' />\n"; 
$rows = mysql_fetch_array($query); 
foreach ($rows as $row) { 
    $string.= sprintf($fmt, $row[0], $row[1]); 
}