如何按人气而不是随机显示标签?

时间:2011-06-09 15:17:37

标签: php tags keyword

需要一些帮助。一直在寻找,但我还没有找到答案。希望你们能帮忙!

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

        $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 个答案:

答案 0 :(得分: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";

答案 1 :(得分:1)

对我来说,你没有做错任何事。你还没有做任何事情。 :)

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

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

这种计算很容易。创建一个数组,并在每次找到时为每个标记添加1:

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

在该循环之后,您将拥有一个包含所有标记的数组及其使用次数。