我试图制作标签云系统,并在一个表中输入带有"name"answers"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>';
}
您必须使用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>';
这里我不使用DISTINCT
,但GROUP BY
允许您聚合每个不同行的计数(基于GROUP BY
列)。
看一下这个图表,可以更好地理解join
是如何工作的。