我有用户输入的标签位于表字段标签下。
$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)。有人知道接近这个的正确方法吗?我应该将结果作为数组获取还是将它们分解?
答案 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;