我正在尝试用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>
但是这并没有单独计算每个引用,即使引用相同,它也为每个条目创建了一个新的表行。
非常感谢任何帮助。
答案 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循环