MySQL在while循环中显示1个结果...但是他们实际上有2个结果?

时间:2010-12-30 00:56:19

标签: php mysql count

我最近将2个查询合并为1(以优化性能)... 1个用于检查计数的查询,另一个用于检查结果,计数是为了确保它们在继续循环之前是实际结果。

继承PHP代码:

<?php

    $query = 'SELECT id, title, COUNT(id) FROM submissions ORDER BY sub_time DESC LIMIT 50';

    $result = mysql_query($query);

    $count = mysql_result($result, 0, 2);

    mysql_data_seek($result, 0); //mysql_result resets the internal pointer...

    if ($count > 0) {
        $i = 0;
        while ($output = mysql_fetch_assoc($result)) {
            ++$i;

            //etc..

        }
    }


?>

问题是它现在返回1个结果? - 当他们实际上有2个结果时(我通过PHPMyAdmin检查以及运行以下代码 - 见下文),我已经缩小了问题,因为COUNT(id)已经与初始结果查询相结合;它表现得像这样。

因为如果我执行以下操作:

<?php

    $query = 'SELECT id, title FROM submissions ORDER BY sub_time DESC LIMIT 50';

    $result = mysql_query($query);

        $i = 0;
        while ($output = mysql_fetch_assoc($result)) {
            ++$i;

            //etc..

        }

?>

它返回2个结果......

所以我的问题是我如何解决这个问题,但要实现我追求的目标?

2 个答案:

答案 0 :(得分:2)

我建议您删除COUNT(id)并使用mysql_num_rows()函数检查在尝试循环之前返回的行数。

您的代码可能如下所示:

<?php

$query = 'SELECT id, title FROM submissions ORDER BY sub_time DESC LIMIT 50';

$result = mysql_query($query);

$count = mysql_num_rows($result);

if ($count > 0) {
    $i = 0;
    while ($output = mysql_fetch_assoc($result)) {
        ++$i;

        //etc..

    }
}

答案 1 :(得分:1)

COUNTaggregate function,通常与GROUP BY子句一起使用。我不相信它在您使用它时在查询中有意义。