从MYSQL填充HTML表并计算行数

时间:2013-03-26 17:57:51

标签: php mysql

我正在尝试用mysql数据填充HTML表,我在Mysql中有以下数据:

ID, IP, Referal

我想创建一个表格,显示参考列表及其发生频率,例如:

ID,    IP,      Referal
1     1.1.1.1   google.com
2     2.2.2.2   google.com
3     3.3.3.3   test.com
4     4.4.4.4   another.com

应输出:

google.com     2
test.com       1
another.com    1

我试过的是这个:

<table class="table table-bordered table-primary">
<tbody>
<?php
$sql="SELECT * FROM traffic";
$result=mysql_query($sql);
?>
<?php while($row = mysql_fetch_array($result)) { ?>
<tr >
<td class="tc"><font face="Arial, Helvetica, sans-serif"><?php if($row['referal']==''){
echo "Empty Referal";
} else { echo $row['referal']; }?></font></td>

<td class="tc"><center><font face="Arial, Helvetica, sans-serif"><?php $referal = $row['referal'];
$sql="SELECT COUNT(*) FROM traffic WHERE referal = $referal";
$num_rows = mysql_num_rows($result);

echo "$num_rows";

?></font></center></td>

</tr>
                    <?php } ?>
            </tbody>
        </table>

但是这并没有单独计算每个引用,即使引用相同,它也为每个条目创建了一个新的表行。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

问题是你收集了上次查询中找到的行数而不是你的计数查询:

$sql="SELECT COUNT(*) FROM traffic WHERE referal = '$referal'";
$num_rows = mysql_num_rows($result);

首先,COUNT命令会返回一行,其中一列包含找到的计数。您应该使用以下内容:

$sql="SELECT COUNT(*) as count FROM traffic WHERE referal = '$referal'";
$numResult = mysql_fetch_array(mysql_query($sql));
$num_rows = $numResult['count'];

此外,在您回显的变量周围加上引号是非常不必要的。这就足够了:

echo $num_rows; //NOT echo "$num_rows";

注意:不要使用MySQL_ *函数,因为它们自PHP 5.5起已被弃用。请改用MySQLi_ *或PDO。

答案 1 :(得分:2)

您可能正在寻找SQL的GROUP BY关键字:

SELECT Referal, COUNT(*) FROM traffic GROUP BY Referal

这将为您提供所需的表格,而不需要在php中添加任何其他for循环