1

我正在尝试计算数据库中提及主题标签的次数。因此,第一个 while 是获取所有主题标签,第二个是在另一个内部,同时计算主题标签被提及的次数。但问题是数字不正确,它只是显示 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>"; 
}
4

3 回答 3

1

我建议使用mysqlior PDO。在这种情况下,查询中按主题标签分组是更好的方法,不需要额外的查询和循环。

$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>";
}
于 2013-09-04T22:04:53.330 回答
0

你的代码有很多问题。首先,不推荐使用 mysql_ 函数,最终将完全从 php 中删除,因此您应该转到 mysqli_ 函数或 PDO。

其次,您对 $i 的操作在错误的位置。您应该将重置$i = 0作为第一个循环中的第一个操作,否则它只会计算使用任何主题标签的总次数。

第三,您在第二个 while 循环中回显 $i,这意味着每次循环运行时,您将永远回显越来越多的数字。在您计算了主题标签的实例之后,回声应该位于内部循环之外。

最后,您实际上可以通过执行一个循环来完成所有这些"SELECT hashtag, count(*) FROM " . $dbPrefix . "hashtags WHERE status=1 group by hashtag"

于 2013-09-04T22:02:46.103 回答
0

无需遍历表中的所有记录即可再次执行相同的操作。您想要的是在 SQL 查询中使用聚合函数。

类似于以下内容:

SELECT hashtag, COUNT(hashtag)
FROM hashtags
GROUP BY hashtag
于 2013-09-04T22:03:51.390 回答