PDO count(*) 不适用于 LIMIT 和 OFFSET

Adr*_*ase 1 mysql

这是我的代码,它可以正常工作,但是这次我还想计算它给出的记录。在插入 COUNT(*) 时,它将为计数行提供 NULL 值

        $query_list_records = "SELECT COUNT(*) from myl_news_comments WHERE news_id=:news_id LIMIT :ajax_read_how_many_comments OFFSET :items_already_loaded";
        $result_list_records = $db->prepare($query_list_records);
        $result_list_records->bindValue(':news_id', $_POST['news_id'] , PDO::PARAM_INT);
        $result_list_records->bindValue(':ajax_read_how_many_comments', (int)$ajax_read_how_many_comments , PDO::PARAM_INT);
        $result_list_records->bindValue(':items_already_loaded', (int)$_POST['items_already_loaded'] , PDO::PARAM_INT);
        $result_list_records->execute();                    
        $total_records = $result_list_records->fetchColumn();

echo $total_records;
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

谢谢,祝你度过一个愉快的夜晚

Rol*_*DBA 5

在查询本身中,尝试通过重写查询将 COUNT(*) 与检索分开,如下所示:

SELECT COUNT(*) from (SELECT myl_news_comments WHERE news_id=:news_id LIMIT :ajax_read_how_many_comments OFFSET :items_already_loaded) A
Run Code Online (Sandbox Code Playgroud)

您的代码现在应该如下所示:

        $query_list_records = "SELECT COUNT(*) from (SELECT myl_news_comments WHERE news_id=:news_id LIMIT :ajax_read_how_many_comments OFFSET :items_already_loaded) A";
        $result_list_records = $db->prepare($query_list_records);
        $result_list_records->bindValue(':news_id', $_POST['news_id'] , PDO::PARAM_INT);
        $result_list_records->bindValue(':ajax_read_how_many_comments', (int)$ajax_read_how_many_comments , PDO::PARAM_INT);
        $result_list_records->bindValue(':items_already_loaded', (int)$_POST['items_already_loaded'] , PDO::PARAM_INT);
        $result_list_records->execute();                    
        $total_records = $result_list_records->fetchColumn();

echo $total_records;
Run Code Online (Sandbox Code Playgroud)

试一试 !!!