如何计算和格式化用户标签

时间:2011-06-18 16:05:42

标签: php mysql

我有用户输入的标签位于表字段标签下。

$sql="SELECT tags from table";
$stmt16 = $conn->prepare($sql);
$result=$stmt16->execute();
while($row = $stmt16->fetch(PDO::FETCH_ASSOC)){ 
echo $tags=$row['tags'];
}

这会产生

  

凉爽,是的,okcool,是,确定

因为在该字段下有2个条目具有相同的3个标记。我希望能够计算每个标签的重复数量,以便结果应该很酷(2)是(2)确定(2)。有人知道接近这个的正确方法吗?我应该将结果作为数组获取还是将它们分解?

3 个答案:

答案 0 :(得分:3)

根据您当前的数据结构,我给出的答案是肯定的:正如您所说,将它们分解并将它们放入数组中。

$tags = array();
while($row = $stmt16->fetch(PDO::FETCH_ASSOC)){ 
    foreach(explode(',',$row['tags']) as $tag) {
        if(isset($tags[$tag]) {$tags[$tag]++;} else {$tags[$tag]=1;}
    }
}

//now you can see how many times each tag occurred...
foreach($tags as $tag=>$count) {
   print "Tag {$tag} occurred {$count} times<br />";
}

但是,如果您可以更改数据库结构,那么如果每个数据库记录只有一个,您会发现管理标记要容易得多。通过这种方式查询它会更容易。

答案 1 :(得分:2)

我会将声明改为

SELECT COUNT(*) as cnt, tags 
FROM table
GROUP BY tags

你就是。

修改 不要忘记将echo更改为echo $row['tags'] ."(". $row['count'] .")";

答案 2 :(得分:1)

只需使用此查询:

SELECT tag, COUNT(*)
FROM table
GROUP BY tag
HAVING COUNT(*) >1;