计算标签的频率

时间:2011-05-16 12:44:18

标签: php mysql

如何获取以下数组中包含的字段中项目的频率?

//
...
...
//database stuff
while($row=mysql_fetch_array($result))
    { 

        //Retrieve tags for this article
    $tags=$row["art_tags"];

     $tagarray=explode(",",$tags);

    foreach($tagarray as $key  => $value)
        {

//这里需要解决方案
//如何在数据库中搜索整个art_tags字段并获取所有标签的频率

echo $value; 

EG。
//大米x 23倍
//豆x 12次

}

3 个答案:

答案 0 :(得分:1)

要计算数据库中的所有标记,请使用array_count_values():

$all_tags = array();
while ($row = mysql_fetch_assoc($result)) {
    $all_tags = array_merge($all_tags, explode(',', $row['art_tags']));
}
$all_tags = array_count_values($all_tags);
echo $all_tags['rice'];

或者,对于一个just标记,让数据库使用COUNT(*):

为您完成工作
$tag = 'rice';
$sql = "SELECT COUNT(*) FROM articles
        WHERE art_tags LIKE '$tag'
        || art_tags LIKE '$tag,%'
        || art_tags LIKE '%,$tag'
        || art_tags LIKE '%,$tag,%'";
$result = mysql_query($sql);
list($number) = mysql_fetch_row($result);

答案 1 :(得分:0)

您可以这样做的一种方法是使用sql count函数。然后你不需要以编程方式执行此操作。但是,如果您无法控制查询并且必须在代码中执行此操作,则您必须遍历数组并检查您要查找的标记是否包含在每条记录中。除非查询已经只找到您需要的那些标记实例,否则只需获取数组的大小。

答案 2 :(得分:0)

你可以试试这段代码:

foreach($tagarray as $key  => $value
{  
  $tag_count[$value] += 1;
}

然后:

foreach ($tag_count as $tag => $count)
{
 echo $tag.'x'.$count.'times';
}