使用LIMIT计算MySQL记录

Mac*_*Mac 6 php mysql count while-loop

当我试图计算表中的记录数时,即使SQL语句中有一个记录LIMIT,但总体来说它是有效的,但是有些奇怪的事情,代码:

$sql = "SELECT COUNT(*) AS count FROM posts
        ORDER BY post_date DESC
        LIMIT 5";

// ... mysql_query, etc

while($row = mysql_fetch_array($result))
{
    // ... HTML elements, etc
    echo $row['post_title'];

    // ... HTML elements, etc

    echo $row['count']; // this displays the number of posts (which shows "12").
}
Run Code Online (Sandbox Code Playgroud)

虽然,通过while循环显示时,它显示如下:

注意:未定义的索引:第55行的/Applications/MAMP/htdocs/blog/index.php中的post_title

如果我删除了COUNT(*) AS count,一切都会完美显示......它是怎么做到的?

irc*_*ell 15

不要COUNT(*)用来计算行数(由于很多原因).写出完整的查询,并在SQL_CALC_FOUND_ROWS之后添加SELECT:

SELECT SQL_CALC_FOUND_ROWS id, title FROM foo LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

然后,执行该查询后(右后),运行:

SELECT FOUND_ROWS();
Run Code Online (Sandbox Code Playgroud)

SELECT如果你没有LIMIT最终的那些,那将返回原始返回的行数(计算所有连接和where子句).

它不是便携式的,但它非常有效(而且恕我直言,这是处理这类问题的正确方法).