0

タグクラウドシステムを作成しようとしていますが、「name」と「product_id」を使用して1つのテーブルにタグを入力します。私はそれが異なる製品のために皆に複数の同じタグを持っているかもしれないようにします。私の問題は、テーブルからタグをエコーすると、すべてのタグが表示されることです。これは良いことですが、繰り返されるタグはその数に含まれます。繰り返されるタグを1回だけエコーする必要がありますが、その方法がわかりません。これが、タグを表示して繰り返した私のコードです。

$id     = $_GET['catid'];
$sql    = "SELECT * FROM tags_group";
$result = mysql_query($sql) or die(mysql_error());
while ($row    = mysql_fetch_array($result)) {
    //echo $row['name'];
    $id      = $row['id'];
    $sql1    = "SELECT * FROM tags WHERE tag_group='$id'";
    $result1 = mysql_query($sql1);
    while ($row1    = mysql_fetch_array($result1)) {
        $name   = $row1['tag_name'];
        $sql2   = "SELECT * FROM tags WHERE tag_name='$name'";
        $resut2 = mysql_query($sql2);
        $rows   = mysql_num_rows($resut2);

        echo $row1['tag_name'] . '(' . $rows . ')' . '<br>';


        // echo $row1['tag_name'].$rows.'<br>';
    }
    echo '<br>';
}
4

1 に答える 1

2

DISTINCTキーワードを使用する必要があります重複を避けてください:

SELECT DISTINCT * FROM tags_group

上記のコメントで述べたように、mysql_*関数の使用をやめる必要があります。それらは非推奨になっています。代わりに、PDO(PHP 5.1以降でサポート)またはmysqli(PHP 4.1以降でサポート)を使用してください。どちらを使用すればよいかわからない場合は、この記事をお読みください

アップデート

また、テーブルを結合して結果を取得するのではなく、ネストされたクエリを使用しているように見えます。代わりにこれを試してください:

$id     = $_GET['catid'];
$sql    = "SELECT tags.tag_name, count(*) AS name_count FROM tags
               INNER JOIN tags_group
               ON tags.tag_group = tags_group.id
               GROUP BY tag_name";
$result = mysql_query($sql) or die(mysql_error());
while ($row    = mysql_fetch_array($result)) {        
    $name   = $row['tag_name'];
    $rows   = $row['name_count'];

    echo $name . '(' . $rows . ')' . '<br>';


    // echo $row['tag_name'].$rows.'<br>';
}
echo '<br>';

ここでは使用しませんDISTINCTGROUP BY、(列に基づいてGROUP BY)個別の行ごとにカウントを集計できます。

がどのように機能するかをよりよく理解するには、この図を見てくださいjoin

于 2012-08-28T19:41:02.863 に答える