我尝试制作标签云系统,然后在一个表中输入带有“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>';
}
答案 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
的工作方式。