【问题标题】:How to get the name of the table with the biggest number of rows in database如何获取数据库中行数最多的表的名称
【发布时间】:2013-10-28 12:17:00
【问题描述】:

我需要获取行数最多的表的名称,我可以找到具有函数 count 和函数 max 的最大行数,但我不知道如何从哪个表中查看最大值,有人可以帮忙吗?

【问题讨论】:

    标签: mysql max rows tablename


    【解决方案1】:

    试试这个查询:

    SELECT table_name, table_rows
    FROM   information_schema.TABLES
    ORDER  table_rows;
    

    所有信息,这是最大的一个:

    SELECT table_name, table_rows
    FROM information_schema.TABLES WHERE table_rows = 
    (SELECT MAX(table_rows) FROM information_schema.TABLES);
    

    php:

    $result = mysql_query("SELECT table_name, table_rows
        FROM information_schema.TABLES WHERE table_rows = 
        (SELECT MAX(table_rows) FROM information_schema.TABLES)");
    
    if (!$result) {
        echo "error"
    }
    
    while ($row = mysql_fetch_assoc($result)) {
        echo $row['table_name'];
        echo $row['table_rows'];
    }
    

    【讨论】:

    • 与 Ahmad 代码一样,我收到相同的错误 Resource id #10?帮助? tnx
    • 可能是您的 php 代码出错,而不是 select-query
    • 当我使用你的 php 时,我得到输出:time_zone_transition117210
    【解决方案2】:
    show table status
    

    将为您提供所需的信息。

    【讨论】:

      【解决方案3】:
      $sql = "SHOW TABLES FROM $dbname";
      $result = $mysqli->query($sql);
      
      if (!$result) {
          echo "DB Error, could not list tables\n";
          echo 'MySQL Error: ' . mysql_error();
          exit;
      }
      
      while ($row = mysql_fetch_row($result)) {
          $count =  "select count(*) as cnt from : {$row[0]}\n";
          $result = $mysqli->query($count);
          $row_array=$result->fetch_array(MYSQLI_ASSOC);
          $print[$row[0]] = $row_array['cnt']; 
      }
      asort($print);
      

      $print 将保存所有行计数的值,键为表名。 使用 asort() 您可以按顺序对其进行排序。

      【讨论】:

      • 我在 mysql 中编写了您的代码,因为我的脚本在 mysql 中,在 mysqli 中没有,但是它不起作用,我收到错误:mysql_fetch_array() 期望参数 1 是资源,给出的布尔值。我认为这一行有问题: $row_array=mysql_fetch_array($result,MYSQL_ASSOC);
      【解决方案4】:

      要直接从任何数据库中获取它,请运行此查询

      select TABLE_NAME
      FROM information_schema.TABLES
      where TABLE_ROWS = (SELECT max(TABLE_ROWS) from information_schema.TABLES);
      

      如果你想在 php 中运行它,你不能只回显你刚刚运行的查询 这就是您收到 Resource#10 错误的原因。检查this question

      解决方案是使用 Mikhail 答案中的“mysql_fetch_assoc”,这实际上给了您正确的结果:“time_zone_transition117210”

      • time_zone_transition 是表名
      • 117210 是行数

      由于您不明白这是您的答案,因此您似乎想将查询限制为特定架构。 所以你在php中的完整答案如下

      $result = mysql_query(
          "SELECT table_name, table_rows
          FROM information_schema.TABLES 
          WHERE table_rows = (
              SELECT MAX(table_rows) FROM information_schema.TABLES 
              WHERE TABLE_SCHEMA ='YOUR_SCHEMA_NAME'
          )
          AND TABLE_SCHEMA = 'YOUR_SCHEMA_NAME'"
      );
      
      while ($row = mysql_fetch_assoc($result)) {
          echo 'table name is: '. $row['table_name'] .' \n ';
          echo 'number of rows is: '. $row['table_rows'] .' \n ';
      }
      

      不要忘记在内部和外部查询中将 YOUR_SCHEMA_NAME 替换为实际名称。

      【讨论】:

      • 你的答案看起来不错,但如果你能稍微解释一下你的陈述,它可能对 OP 和任何其他读者更有好处。
      • @Ahmad-它不起作用,我将您的代码放入 mysql_query 并回显它,但我收到错误 Resource id #10?
      • @AhmadAbdelghany 我在最后使用了这个查询: SELECT TABLE_ROWS, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'db_baza' ORDER BY TABLE_ROWS DESC LIMIT 1 ,它正在工作
      猜你喜欢
      • 1970-01-01
      • 2011-09-07
      • 2010-10-25
      • 2011-02-17
      • 2021-07-10
      • 2011-10-30
      • 2014-03-29
      • 2015-12-12
      相关资源
      最近更新 更多