2014-02-19 85 views
0

我目前在我的數據庫中有兩個表。 (網站完成後將有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錶行的總數目。我需要查詢在所有表上運行,並將該數字合併。任何幫助將不勝感激!謝謝。

+0

我看到一個,但不涉及我的問題。 – user2106354

+2

這是一個非常糟糕的獲取行數的方法,因爲您要求將ENTIRE表發送到PHP。這會在你的表開始變得越來越大時失敗......相反,使用''SELECT COUNT(*)FROM'tablename'' –

+0

如果所有表中所有行的計數具有任何意義,它意味着表所有數據都有相似的數據,這意味着應該只有_one_表中的所有數據。 – 2014-02-19 01:38:39

回答

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 
} 
0

您可以通過查詢INFORMATION_SCHEMA數據庫和表表內實現這一目標。

像這樣的東西可能工作:

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是帶有大型表的db(大於幾GB),查詢可能需要更長的時間。
  3. 我想它會打開整個表格文件,也許有人可以擴展它。

你可以在這裏瞭解更多:http://dev.mysql.com/doc/refman/5.5/en/information-schema.html

相關問題