2011-06-09 63 views
0

需要一点帮助。一直在寻找,但我还没有找到答案。希望你们可以帮忙!如何通过流行而不是随机显示标签?

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

 $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

分享数据库结构,我们不是魔术师。 – 2011-06-09 15:20:25

回答

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为每个标签每次你找到它:

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

这个循环后,您将有一个包含所有标签的数组,它使用的次数。