2010-02-09 30 views

Respuesta

50

Para consultas de selección se puede utilizar el FOUND_ROWS constructo (documented here):

SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever; 
SELECT FOUND_ROWS() ; 

que devolverá el número de filas en el último SELECT consulta (o si la primera consulta tiene una cláusula LIMIT, que devuelve el número de filas habría habido sin el LIMIT).

Para UPDATE/DELETE/INSERT, es el ROW_COUNT constructo

INSERT INTO your_table VALUES (1,2,3); 
SELECT ROW_COUNT(); 

que devolverá el número de filas afectadas.

+0

@@ ROWCOUNT ayuda a tener el valor después de la ejecución de la selección, que es lo que quiero; y luego haga más cálculos en un procedimiento almacenado tomando el número total de filas devueltas – abs

+0

Lo siento, debo haber confundido eso. Editado mi respuesta. – AndiDog

+0

> devuelve el número de filas que habría sin el LIMITE – mayu

2

La forma más sencilla sería utilizar una variable:

mysql> SELECT @rowcount:=COUNT(*) FROM my_table; 
mysql> SELECT @rowcount; 

o puede utilizar FOUND_ROWS() constructo después de poner un SQL_CALC_FOUND_ROWS en una instrucción SELECT.

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM my_table; 
mysql> SELECT FOUND_ROWS(); 
6
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name 

    -> WHERE id > 100 LIMIT 10; 

mysql> SELECT FOUND_ROWS(); 

Lea más sobre esta here

0

Hay otra manera:

CREATE TEMPORARY TABLE `results` AS (*** Your query without LIMIT ***); 

Obtener el número de filas

SELECT COUNT(*) FROM `results`; 

Consigue el subconjunto

SELECT * FROM `results` LIMIT 5,10; 

La tabla temporal existe solo en la sesión actual. Todavía limpiaría después

DROP TEMPORARY TABLE `results`; 
Cuestiones relacionadas