query nums num mysqli_num_rows mysqli_num_row length php mysql sql-calc-found-rows

nums - ¿Cómo usar MySQL Found_Rows() en PHP?



rowcount php (7)

¿Realmente crees que seleccionar TODAS las filas de las tablas es más rápido que contarlas?
Myisam almacena una serie de registros en los metadatos de la tabla, por lo que SELECT COUNT (*) FROM table no tiene que acceder a los datos.

Intento evitar hacer Count ( ) debido a un problema de rendimiento. (es decir, SELECT COUNT ( ) DE los usuarios)

Si ejecuto lo siguiente en phpMyAdmin, está bien:

SELECT SQL_CALC_FOUND_ROWS * FROM Users; SELECT FOUND_ROWS();

Volverá # de filas. es decir, # de usuarios.

Sin embargo, si ejecuto en PHP, no puedo hacer esto:

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

Parece que a PHP no le gusta que pasen dos consultas. Entonces, ¿cómo puedo hacer eso?


Es un error común, que SQL_CALC_FOUND_ROWS se desempeña mejor que COUNT (). Vea esta comparación de los chicos de Percona: http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

Para responder su pregunta: solo se permite una consulta por una llamada a mysql_query, tal como se describe en el manual: mysql_query() sends a unique query (multiple queries are not supported)

Se admiten varias consultas al usar ext/mysqli como su extensión de MySQL:

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


Esta es una manera fácil y funciona para mí:

$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''];


Sólo este código funciona para mí, así que quiero compartirlo para ti.

$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;


Sus dos consultas:

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

PHP solo puede emitir una única consulta por llamada mysql_query


Utilice ''union'' y columnas vacías:

$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''];


SQL_CALC_FOUND_ROWS solo es útil si está utilizando una cláusula LIMIT , pero aún así desea saber cuántas filas se habrían encontrado sin el LIMIT .

Piensa en cómo funciona esto:

SELECT SQL_CALC_FOUND_ROWS * FROM Users;

Está obligando a la base de datos a recuperar / analizar TODOS los datos de la tabla y luego los desecha. Incluso si no va a recuperar ninguna de las filas, el servidor de base de datos aún comenzará a extraer datos reales del disco en el supuesto de que querrá esos datos.

En términos humanos, compró el contenido completo de la tienda de ultramarinos, pero tiró todo excepto el paquete de chicle del puesto del cajero.

Mientras que, haciendo:

SELECT count(*) FROM users;

permite que el motor de base de datos sepa que, si bien desea saber cuántas filas hay, no podría preocuparse menos por los datos reales. En la mayoría de los DBMS inteligentes, el motor puede recuperar este conteo a partir de los metadatos de la tabla, o una simple ejecución a través del índice de clave principal de la tabla, sin tocar los datos de la fila en el disco.