Подсчитайте частоту тегов

#php #mysql

#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; 
  

Например.
// Рис х 23 раза
// Фасоль х 12 раз

 }
  

Комментарии:

1. Как обычно, ответ заключается в НОРМАЛИЗАЦИИ СХЕМЫ ВАШЕЙ БАЗЫ ДАННЫХ

Ответ №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'];
  

Или, для одного тега, позвольте базе данных выполнить всю работу за вас с помощью 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);
  

Ответ №2:

Один из способов, которым вы могли бы это сделать, — использовать функцию sql count. Тогда вам не нужно было бы делать это программно. Однако, если у вас нет контроля над запросом и вам приходится выполнять это в коде, вам придется либо выполнить итерацию по массиву, либо проверить, содержится ли тег, который вы ищете, внутри каждой записи. Если запрос уже не находит только те экземпляры тегов, которые вам нужны, тогда просто получите размер массива.

Ответ №3:

вы можете попробовать этот код:

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

и затем:

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

Комментарии:

1. Это работает, но при этом подсчитывается частота в строке. я хочу подсчитать частоту во всем столбце art_tags, включая все строки.