回显mysql查询结果时如何忽略重复行

时间:2012-08-28 19:38:47

标签: php mysql tags

我尝试制作标签云系统,然后在一个表中输入带有“name”和“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>';
}

1 个答案:

答案 0 :(得分:2)

您必须使用DISTINCT关键字,避免重复:

SELECT DISTINCT * FROM tags_group

正如我在上面的评论中提到的,您应该停止使用mysql_*函数。他们被弃用了。而是使用PDO(从PHP 5.1开始支持)或mysqli(从PHP 4.1开始支持)。如果您不确定使用哪一个,read this article

<强>更新

看起来您还在使用嵌套查询,而不是加入表并检索结果。试试这个:

$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>';

此处我不使用DISTINCT,但GROUP BY允许您汇总每个不同行的计数(基于GROUP BY列)。

Take a look at this diagram更好地了解join的工作方式。