【问题标题】:How to get the total found rows without considering the limit in PDO?如何在不考虑 PDO 限制的情况下获取找到的总行数?
【发布时间】:2011-01-04 16:52:54
【问题描述】:

我发现为了显示加载更多按钮而进行二次查询以检查更多结果是非常不专业的。

我正在使用 PDO,有没有什么方法可以在没有限制过滤器的情况下获取找到的总行数但仍然过滤结果?

当前代码:

// Show Results

$start = 0

$r=$db->prepare("SELECT * FROM locations WHERE area=:area LIMIT $start,10");
$r->execute($fields);

// See if there is more results

$r=$db->prepare("SELECT * FROM locations WHERE area=:area");
$r->execute($fields);

$offset=$start+10;
if($r->rowCount() > $offset){
echo "<div class='load'>Load More</div>";
}

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    仅 MySQL AFAIK:

    $r=$db->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM locations WHERE area=:area LIMIT $start,10");
    $r->execute($fields);
    
    var_dump($r->fetchAll());
    
    var_dump($db->query('SELECT FOUND_ROWS();')->fetch(PDO::FETCH_COLUMN));
    

    对于数据库服务器而言,当然与查询所有记录的时间一样繁重。对于非 MySQL 使用,此查询当然比获取 all 记录的行数更好:

    $r=$db->prepare("SELECT COUNT(*) FROM locations WHERE area=:area");
    $r->execute($fields);
    $count = $r->fetch(PDO::FETCH_COLUMN);
    echo $count;
    

    【讨论】:

    • 有人说使用 SQL_CALC_FOUND_ROWS 比运行两个查询慢 10 倍,具体取决于索引和其他条件。使用前阅读和测试,是我的建议。在此处查看性能测试:percona.com/blog/2007/08/28/…
    • @PaparazzoKid:是的,人们应该进行测试。但是,由于那篇文章大约有 8 年的历史,我也不相信那篇文章的内容;)
    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2022-06-16
    相关资源
    最近更新 更多