如何将此MySQL数据转换为此XML字符串(PHP)?

时间:2012-03-21 03:32:12

标签: php mysql xml

在我的一个网站上,我将所有访问者及其国家/地区代码记录在MySQL表格中。

为简单起见,我们只说这个表的列是“IP”和“Country”。所以我有来自几个不同国家的大量访客。

出于显示目的,我需要将这些数据放入XML格式字符串中,如下所示:

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

value =''来自该国家的访问者数量。我希望字符串包含表格中的所有国家/地区。

我认为我可以这样做的一种方法是计算具有特定国家/地区的所有行,例如:

$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或什么......

感谢您的帮助!

3 个答案:

答案 0 :(得分: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]);
}

答案 1 :(得分: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]}'/>";
}

答案 2 :(得分: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);