代码之家  ›  专栏  ›  技术社区  ›  murvinlai

如何在PHP中使用MySQL Found\u Rows()?

  •  23
  • murvinlai  · 技术社区  · 14 年前

    我尽量避免数数( )因为性能问题(i、 e.选择计数( )(来自用户)

      SELECT SQL_CALC_FOUND_ROWS * FROM Users;
      SELECT FOUND_ROWS();
    

    但是,如果在PHP中运行,则无法执行以下操作:

      $query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users;
        SELECT FOUND_ROWS(); ';
      mysql_query($query);
    

    PHP似乎不喜欢有两个查询传入。那么,我该怎么做呢?

    7 回复  |  直到 14 年前
        1
  •  28
  •   Marc B    14 年前

    SQL_CALC_FOUND_ROWS LIMIT 但是仍然想知道如果没有 限制 .

    想想这是怎么回事:

    SELECT SQL_CALC_FOUND_ROWS * FROM Users;
    

    您强制数据库检索/解析表中的所有数据,然后将其丢弃。即使您不打算检索任何行,DB服务器仍将开始从磁盘中提取实际数据,前提是您需要这些数据。

    鉴于,做:

    SELECT count(*) FROM users;
    

        2
  •  23
  •   JochenJung    14 年前

    它的两个问题:

    $query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users';
    mysql_query($query);
    $query = 'SELECT FOUND_ROWS()';
    mysql_query($query);
    

        3
  •  5
  •   Mchl    14 年前

    一个常见的误解是,SQL\u CALC\u FOUND\u ROWS的性能比COUNT()好。看一下Percona的比较: http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

    回答您的问题:每个mysql\u查询调用只允许一个查询,如手册中所述: mysql_query() sends a unique query (multiple queries are not supported)

    ext/mysqli 作为MySQL扩展:

    http://www.php.net/manual/en/mysqli.multi-query.php

        4
  •  4
  •   Bagova    10 年前

    只有这个代码对我有效,所以我想和你分享。

    $Result=mysqli_query($i_link,"SELECT SQL_CALC_FOUND_ROWS  id From users LIMIT 10"); 
    $NORResult=mysqli_query($i_link,"Select FOUND_ROWS()"); 
    $NORRow=mysqli_fetch_array($NORResult); 
    $NOR=$NORRow["FOUND_ROWS()"]; 
    echo $NOR;
    
        5
  •  3
  •   diyism    10 年前

    $sql="(select sql_calc_found_rows tb.*, tb1.title
          from orders tb
               left join goods tb1 on tb.goods_id=tb1.id
          where {$where}
          order by created desc
          limit {$offset}, {$page_size})
          union
          (select found_rows(), '', '', '', '', '', '', '', '', '')
         ";
    $rs=$db->query($sql)->result_array();
    $total=array_pop($rs);
    $total=$total['id'];
    
        6
  •  3
  •   Amin Adel    6 年前

    这是一个简单的方法&为我工作:

    $query = "
    SELECT SQL_CALC_FOUND_ROWS * 
    FROM tb1
    LIMIT 5";
    
    $result = mysqli_query($link, $query);
    
    $query = "SELECT FOUND_ROWS() AS count";
    $result2 = mysqli_query($link, $query);
    
    $row = mysqli_fetch_array($result2);
    
    echo $row['count'];
    
        7
  •  0
  •   Naktibalda    14 年前

    您真的认为从表中选择所有行比计算它们快吗?
    Myisam在表的元数据中存储了许多记录,所以从表中选择COUNT(*)不必访问数据。