需要一点帮助。我一直在寻找,但我还没有找到答案。希望你们能帮上忙!
我在我的网站上对用户输入的标签进行排序。我使用下面的代码来调用标记...
$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()的顺序,但我不确定如何将其更改为某种流行度,例如标签在数据库中被使用了多少次。
谁能告诉我我哪里做错了。我相信这是很简单的事情,而我只是个菜鸟。:)谢谢大家。
发布于 2011-06-09 23:24:25
像这样更改您的查询:
$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";发布于 2011-06-09 23:24:55
在我看来你没做错什么。你还什么都没做呢。:)
在我看来,您实际上是在从posts表中查询标签。很难指望这样一个字段,因为它可能包含一个单独的标签列表。如果您有一个包含所有标签的单独表,以及一个将标签链接到帖子的交叉表,则可以获得所有标签的列表,并计算每个标签链接的帖子数量。
在您当前的设置中,这是不可能的,您将不得不解析每个字段并保持计数。
计算起来很简单。创建一个数组,并在每次找到每个标记时为其添加1:
$tags = array();
// Loop trough all records:
// Split the tags
// For each tag:
$tags[$tag] = (array_key_exists($tag, $tags)?$tags[$tag] + 1: 1);在该循环之后,您将拥有一个包含所有标记及其使用次数的数组。
https://stackoverflow.com/questions/6295174
复制相似问题