2011-01-04 14 views
11

Me pareció muy poco profesional hacer una consulta secundaria para comprobar si hay más resultados para mostrar un cargar más botón.¿Cómo obtener las filas totales encontradas sin considerar el límite en PDO?

Estoy usando PDO, ¿hay alguna forma de obtener las filas totales encontradas sin el filtro de límite pero filtrando los resultados?

Código actual:

// Show Results 

$start = 0 

$r=$db->prepare("SELECT * FROM locations WHERE area=:area LIMIT $start,10"); 
$r->execute($fields); 

// See if there is more results 

$r=$db->prepare("SELECT * FROM locations WHERE area=:area"); 
$r->execute($fields); 

$offset=$start+10; 
if($r->rowCount() > $offset){ 
echo "<div class='load'>Load More</div>"; 
} 

Respuesta

17

MySQL solamente yo sepa:

$r=$db->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM locations WHERE area=:area LIMIT $start,10"); 
$r->execute($fields); 

var_dump($r->fetchAll()); 

var_dump($db->query('SELECT FOUND_ROWS();')->fetch(PDO::FETCH_COLUMN)); 

Sobre tan pesado para el servidor de base de datos como la consulta de una sola vez para todos los registros, por supuesto. Para uso no MySQL, esta consulta es, por supuesto, mejor que conseguir el recuento de filas de todos los registros:

$r=$db->prepare("SELECT COUNT(*) FROM locations WHERE area=:area"); 
$r->execute($fields); 
$count = $r->fetch(PDO::FETCH_COLUMN); 
echo $count; 
+0

gracias :) -5 chars- – Ryan

+1

"gracias" es 6 caracteres ;-) –

+1

Algunos dicen que el uso de SQL_CALC_FOUND_ROWS es hasta 10 veces más lento que ejecutar dos consultas, según los índices y otras condiciones. Lea y pruebe antes de usar, es mi consejo. Consulte la prueba de rendimiento aquí: https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/ – TheCarver

Cuestiones relacionadas