如何显示数据库中所有表中的总行数

时间:2014-02-19 01:33:29

标签: php mysql database

我目前在我的数据库中有2个表。 (当网站完成时将有50个)在主页面上,我将有一个计数器,显示我的网站/我的数据库中显示的记录总数。我目前能够显示每个表中的行数。我需要这个数字是数据库中所有表中的记录总数。这是我目前的代码。

查询:

// Query for recently added. Total # of rows in table resources
$mysqli = new mysqli("localhost","root", "", "rnddb");

$query = $mysqli->prepare("SELECT * FROM `resources`");
$query->execute();
$query->store_result();

$recentlyadded = $query->num_rows;

显示:

<?php echo $recentlyadded; // Total # of rows ?>

截至目前,这给了我resources表中的总行数。我需要在所有表上运行查询并将该数字合并给我。任何帮助将不胜感激!感谢。

2 个答案:

答案 0 :(得分:0)

一种方法是,如果您的用户可以访问命令“SHOW TABLES”,您可以运行此命令,因为它将返回数据库中的所有表。

您可以运行SQL

SHOW TABLE

它将返回所有表的列表..然后你只需要使用foreach或while语句循环它们,具体取决于你如何收集它们。

while($table = $query->fetch_array(MYSQLI_ASSOC)) {
  // do another sql
  $sql = "SELECT COUNT(*) FROM ". $table; // or something like that
}

答案 1 :(得分:0)

您可以通过查询INFORMATION_SCHEMA数据库和其中的TABLES表来实现此目的。

这样的事情可能有用:

SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA IN (DATABASE())

其中DATABASE()返回您正在使用的当前数据库,因此如果您的数据库名为“mydb”,那么DATABASE()将返回“mydb”。

你可以通过替换这样的函数来为任何数据库执行类似的操作:

SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA IN ('otherdb')

重要提示:

  1. 对于InnoDB表,行计数只是SQL优化中使用的粗略估计。
  2. 对于小型表,查询INFORMATION_SCHEMA.TABLES表的速度很快,但当TABLE_SCHEMA为带有大表(大于几GB)的db时,查询可能需要更长的时间。
  3. 我认为它打开了完整的表格文件,也许有人可以扩展它。
  4. 您可以在此处了解详情:http://dev.mysql.com/doc/refman/5.5/en/information-schema.html