Как показать теги по популярности вместо случайных? - PullRequest
0 голосов
/ 09 июня 2011

нужна помощь. Поиск, но я еще не нашел ответ. Надеюсь, вы, ребята, можете помочь!

Я сортирую введенные пользователем теги на моем сайте. Я использую следующий код для вызова тегов ...

        $query="SELECT gtags FROM posts WHERE category='".mysql_real_escape_string($CATID)."' order by rand() limit 20";
    $results=$conn->execute($query);
    $gtags = $results->getrows();
    for($i=0; $i<count($gtags);$i++)

Как я могу отфильтровать теги по популярности, а не по случайности? Я вижу порядок по rand (), но я не уверен, как это сделать, изменив его на какую-то популярность, например, сколько раз тег использовался в базе данных.

Может кто-нибудь, пожалуйста, покажите мне, что я делаю не так. Я уверен, что это что-то простое, и я просто нуб. :) Спасибо всем.

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Мне кажется, ты не делаешь ничего плохого. Ты еще ничего не делаешь. :)

Мне кажется, что вы на самом деле запрашиваете теги из таблицы сообщений. Сложно рассчитывать на такое поле, потому что оно, вероятно, будет содержать отдельный список тегов. Если бы у вас была отдельная таблица, содержащая все теги, и перекрестная таблица, которая связывает теги с сообщениями, вы можете получить список всех тегов и подсчитать количество связанных сообщений на тег.

В вашей текущей настройке это невозможно, и вам придется анализировать каждое поле и вести подсчет.

Этот подсчет достаточно прост. Создайте массив и добавляйте 1 для каждого тега каждый раз, когда вы его найдете:

$tags = array();
// Loop trough all records:
  // Split the tags
  // For each tag:
    $tags[$tag] = (array_key_exists($tag, $tags)?$tags[$tag] + 1: 1);

После этого цикла у вас будет массив, содержащий все теги и количество раз его использования.

1 голос
/ 09 июня 2011

Измените ваш запрос следующим образом:

$query="SELECT gtags FROM (
    SELECT gtags, (SELECT count(*) from posts tPost where tPost.gtags = posts.gtags) noOfApp 
    FROM posts WHERE category='".mysql_real_escape_string($CATID)."' 
  ) Pst 
  order by noOfApp limit 20";
...