不一会儿

时间:2013-09-04 21:53:25

标签: php while-loop

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

3 个答案:

答案 0 :(得分:1)

我建议使用mysqliPDO。在这种情况下,通过查询中的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