我正在尝试计算数据库中提到的#标签的次数。首先是获取所有主题标签,第二个是在另一个内部,同时计算提到主题标签的次数。但问题是数字不正确,它只是显示1,2,3,4,5等等,当有一个标签提到两次它显示即3 + 4。
我该如何解决这个问题?
$i = 0;
$popular_hashtags_query = mysql_query("SELECT * FROM " . $dbPrefix . "hashtags WHERE status=1");
while ($popular_hashtags = mysql_fetch_array($popular_hashtags_query)) {
echo "<div class='hashtag_label'><a data-hover='";
$count_hashtags_query = mysql_query("SELECT * FROM " . $dbPrefix . "hashtags WHERE status=1 AND hashtag='" . $popular_hashtags['hashtag'] . "'");
while ($count_hashtags = mysql_fetch_array($count_hashtags_query)) {
$i++;
echo $i;
}
echo "'><span>#".$popular_hashtags['hashtag'] . "</span></a></div>";
}
答案 0 :(得分:1)
我建议使用mysqli
或PDO
。在这种情况下,通过查询中的hashtag分组是更好的方式,而不需要额外的查询和循环。
$popular_hashtags_query = mysql_query("
SELECT
`hashtag`, count(*) AS `count`
FROM `" . $dbPrefix . "hashtags` WHERE `status` = 1 GROUP BY `hashtag`
");
while ($popular_hashtags = mysql_fetch_array($popular_hashtags_query)) {
echo "<div class='hashtag_label'><a data-hover='";
echo $popular_hashtags['count'];
echo "'><span>#" . $popular_hashtags['hashtag'] . "</span></a></div>";
}
答案 1 :(得分:0)
您的代码存在许多问题。首先,不推荐使用mysql_函数,最终将完全从php中删除,因此您应该转移到mysqli_ functions或PDO。
其次,你对$ i的行为是在错误的地方。您应该将$i = 0
重置为第一个循环中的第一个操作,否则它只会计算使用任何hashtag的总次数。
第三,你在第二个while循环中回显$ i,这意味着每次循环运行时,你将永远回应越来越多的数字。在计算了主题标签的实例后,回显应该在内循环之外。
最后,通过执行"SELECT hashtag, count(*) FROM " . $dbPrefix . "hashtags WHERE status=1 group by hashtag"
答案 2 :(得分:0)
不需要遍历表中的所有记录来再次执行相同的操作。 你想要的是在SQL查询中使用聚合函数。
如下所示:
SELECT hashtag, COUNT(hashtag)
FROM hashtags
GROUP BY hashtag