0

我试图制作标签云系统,并在一张带有“名称”和“product_id”的表中输入标签。我做的可能有多个相同的标签,每个人都针对不同的产品。我的问题是,当从表中回显标签时,它会显示所有标签,这很好,但是重复的标签在那个计数中。我只需要回显重复的标签一次,但我不知道如何做到这一点。这是显示和重复标签的我的代码。

$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关键字 do 避免重复:

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列)。

看一下这张图,以更好地理解joins 是如何工作的。

于 2012-08-28T19:41:02.863 回答