2

HTMLテーブルにmysqlデータを入力しようとしていますが、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";

注意: PHP 5.5で廃止されたため、MySQL_*関数は使用しないでください。代わりにMySQLi_*またはPDOを使用してください。

于 2013-03-26T18:07:15.310 に答える
2

GROUP BYあなたはおそらくSQLのキーワードを探しています:

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

これにより、phpに追加のforループがなくても、必要なテーブルが正確に得られます。

于 2013-03-26T18:09:08.220 に答える