2011-01-04 11 views
11

daha fazla düğmesini yüklemek için daha fazla sonuç için denetlemek üzere ikincil bir sorgu yapmak için çok profesyonelce buldum.PDO'daki sınırı dikkate almadan toplam bulunan satırları nasıl alabilirim?

PDO kullanıyorum, limit filtresi olmadan toplam bulunan satırları almanın, ancak sonuçları filtrelemenin bir yolu var mı?

Güncel Kod: Sadece AFAIK

// 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>"; 
} 

cevap

17

MySQL: Tabii tüm kayıtlar için tek bir zaman sorgulama gibi veritabanı sunucusu için ağır Hakkında

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

.

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

teşekkürler :) -5 chars- – Ryan

+1

"teşekkürler" 6 karakter ;-) –

+1

Bazı kullanarak ki: olmayan MySQL kullanımı için, bu sorgu elbette daha iyi o zaman kayıtları tüm ait rowcount alma olduğunu SQL_CALC_FOUND_ROWS, dizinlere ve diğer koşullara bağlı olarak iki sorgunun çalıştırılmasından 10 kat daha yavaştır. Kullanmadan önce okuyun ve test edin, benim tavsiyemdir. Performans testini buradan kontrol edin: https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/ – TheCarver

İlgili konular