2

我正在尝试用 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>

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

任何帮助是极大的赞赏。

4

2 回答 2

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。

于 2013-03-26T18:07:15.310 回答
2

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

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

这将为您提供您想要的表格,而无需在 php 中进行任何额外的 for 循环

于 2013-03-26T18:09:08.220 回答