2012-03-21 116 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]); 
} 
相关问题