如何计算 MySQL 表中的行数(PHP PDO)

Posted

技术标签:

【中文标题】如何计算 MySQL 表中的行数(PHP PDO)【英文标题】:How to count number of rows in MySQL table (PHP PDO) 【发布时间】:2017-12-04 02:22:15 【问题描述】:

这是我的代码

$stmt = $conn->prepare("SELECT tmdb_movies.movie_title,tmdb_movies.tmdb_id, count (tmdb_id),GROUP_CONCAT(DISTINCT genres.genres_name) AS genres_name

FROM tmdb_movies

JOIN genres USING (tmdb_id)

GROUP BY tmdb_movies.movie_title,tmdb_movies.tmdb_id

HAVING find_in_set('$category1', genres_name) AND find_in_set('$category2', genres_name) 

LIMIT $limit OFFSET $start"); 


     // Then fire it up
     $stmt->execute();

 // Pick up the result as an array
 $result = $stmt->fetchAll();

由于我无法计算同一代码中包含 $category1$category2 的总行数,因此我在其前面添加了此代码。

$sql = "SELECT count(tmdb_id),group_concat(genres.genres_name) AS genres_name

 FROM `tmdb_movies` 

JOIN genres USING (tmdb_id)
GROUP BY tmdb_movies.tmdb_id
HAVING find_in_set('$category1', genres_name) AND find_in_set('$category2', genres_name) "; 

$result = $conn->prepare($sql); 
$result->execute(); 
$totalrows = $result->rowCount();
echo $totalrows;

但是$totalrows echo 3 在这里。但是它们的行数比 3 多得多。

【问题讨论】:

Find total number of results in mysql query with offset+limit的可能重复 【参考方案1】:

您在使用 fetchAll() 执行后覆盖了 $stmt

所以试试这个

$stmt->execute();
 $totalrows = $stmt->rowCount(); 
 echo $totalrows;
 // Pick up the result as an array
 $result = $stmt->fetchAll();

【讨论】:

它与第一行的电影标题相呼应 Fatal error: Uncaught Error: Call to undefined method PDOStatement::fetchRow() in 这里的答案是 10,因为 Limit 是 10。 那你想要什么?它将根据限制返回,如果您需要全部从查询中删除限制 我无法移除限制。我想计算数据库中的所有行来制作分页系统。所以我需要再做一个选择语句来无限制地计算这个?【参考方案2】:

尝试 rowCount() 计算行数

$totalrows = $stmt->rowCount();

【讨论】:

这里的答案是 10,因为 Limit 是 10。 更新了我的问题,立即查看【参考方案3】:

试试这个

$stmt = $conn->prepare("SELECT SQL_CALC_FOUND_ROWS tmdb_movies.movie_title,tmdb_movies.tmdb_id, count (tmdb_id),GROUP_CONCAT(DISTINCT genres.genres_name) AS genres_name

FROM tmdb_movies

JOIN genres USING (tmdb_id)

GROUP BY tmdb_movies.movie_title,tmdb_movies.tmdb_id

HAVING find_in_set('$category1', genres_name) AND find_in_set('$category2', genres_name) 

LIMIT $limit OFFSET $start"); 


     // Then fire it up
     $stmt->execute();

 // Pick up the result as an array
 $result = $stmt->fetchAll();
 $conn->prepare('SELECT FOUND_ROWS() as COUNT');
 $conn->execute();
 $count = $conn->fetchColumn();
 echo $count; //here's your total count

【讨论】:

Fatal error: Uncaught Error: Call to undefined method PDOStatement::prepare() in Fatal error: Uncaught Error: Call to undefined method PDO::execute() in 。在我的代码中 $conn 连接到数据库 您是否在原始声明中添加了SQL_CALC_FOUND_ROWS 现在,我做到了...但是Fatal error: Uncaught Error: Call to undefined method PDO::execute() 在第 149 行。这是第 149 行`$conn->execute();`【参考方案4】:
    //This is the best answer ever to this questions since mysqli is deprecated     
    //this is the code to get the total number of rows
         $handler = new PDO(DB_HOST, DB_USERNAME, DB_PASSWORD); $stmt = $handler->prepare('SELECT COUNT(*) AS totalRows FROM table_name '); 
         $stmt->execute(); 
         $row = $stmt->fetch(PDO::FETCH_ASSOC); 
         $totalRows = $row['totalRows']; ?> 
         //this prints the total number of rows
        echo $totalRows; 

【讨论】:

以上是关于如何计算 MySQL 表中的行数(PHP PDO)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 获取 MySQL 表中的行数?

php 计算表中的行数

如何加快计算 PostgreSQL 表中的行数?

为啥这种使用 PDO 计算 Mysql 行数的方法不起作用? [关闭]

MySql 的行数并插入到计数的表中

jQuery:计算表中的行数