需要一些帮助。一直在寻找,但我还没有找到答案。希望你们能帮忙!
我在我的网站上对用户输入的标签进行排序。我正在使用以下代码来调用标记...
$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()的顺序,但我不知道如何将其更改为某种流行度,例如数据库中标记的使用次数。
有人可以告诉我我做错了什么。我确信这很简单,我只是一个菜鸟。 :)谢谢大家。
答案 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);
在该循环之后,您将拥有一个包含所有标记的数组及其使用次数。