2013-03-26 49 views
2

我試圖填充一個HTML表格與MySQL數據,我有以下數據在MySQL:填充HTML表格和計數行

ID, IP, Referal 

我想創建一個表,其中顯示的列表在referals以及多久它們發生,例如:輸出

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

可以打印輸出,你通過使用print_r($ result)從查詢中獲取它; – 2013-03-26 18:00:50

回答

2

您可能正在尋找GROUP BY關鍵字SQL的:在PHP

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

這會給你正是你想要的表,無需任何額外的for循環

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。

+0

謝謝,這個作品非常漂亮。它現在相應地將計數分組。雖然我仍然有問題,它爲每個條目創建一個新的表格行,即使它是相同的參考。如果你能向正確的方向暗示我,我將不勝感激! – 2013-03-26 18:12:12

+1

GROUP BY Referal排序出一個,不幸的是我不能接受2個答案:( – 2013-03-26 18:14:35

+0

+1爲mysqli/pdo – Misch 2013-03-26 18:14:49