【问题标题】:How to show tags by popularity instead of random?如何按受欢迎程度而不是随机显示标签?
【发布时间】:2011-06-09 15:17:36
【问题描述】:

需要一点帮助。一直在寻找,但我还没有找到答案。希望大家帮忙!

我正在对用户在我的网站上输入的标签进行排序。我正在使用以下代码来调用标签...

        $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() 的顺序,但我不确定如何将其更改为某种流行度,例如该标签在数据库中使用了多少次。

谁能告诉我我做错了什么。我敢肯定这很简单,我只是个菜鸟。 :) 谢谢大家。

【问题讨论】:

  • 共享数据库结构,我们不是魔术师。

标签: php tags keyword


【解决方案1】:

像这样更改您的查询:

$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";

【讨论】:

    【解决方案2】:

    在我看来你没有做错任何事。你还没有做任何事情。 :)

    在我看来,您实际上是在从帖子表中查询标签。很难指望这样一个字段,因为它可能包含一个单独的标签列表。如果您有一个包含所有标签的单独表,以及一个将标签链接到帖子的交叉表,您可以获得所有标签的列表,并计算每个标签的链接帖子数。

    在您当前的设置中这是不可能的,您必须解析每个字段并保持计数。

    计数很容易。创建一个数组,每次找到时为每个标签加 1:

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

    在那个循环之后,你会得到一个包含所有标签的数组,以及它被使用的次数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多