Ben Cakephp SINIRI kullanırken toplam satır sayısını döndürmek için MySQL SQL_CALC_FOUND_ROWS özelliği yararlanmak paginate yapmaya çalışıyorum. Umarım, bu) daha sonra (sayfalandırmak paginateCount () ikili sorgu ortadan kaldırabilir.
Benim app_model.php konumunda yer alır bu koyduk, ve bu temelde çalışır, ancak daha iyi yapılabilir. Birisi bana 1 SQL stmt sadece çalıştırır böylece paginate / paginateCount geçersiz kılmak için nasıl anlamaya yardımcı olabilir?
/**
* Overrkimlikden paginateCount method, to using SQL_CALC_FOUND_ROWS
*/
public function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
$options = array_merge(compact('conditions', 'recursive'), $extra);
$options['fields'] = "SQL_CALC_FOUND_ROWS `{$this->alias}`.*";
S: nasıl) (paginate kullanılan AYNI sınır değerini alabilirim?
$options['limit'] = 1; // kimlikeally, should return same rows as in paginate()
S: biz bir şekilde fazladan sorgu olmadan, doğrudan sayfalandırmamayı sorgu sonuç alabilirsiniz?
$cache_results_from_paginateCount = $this->find('all', $options);
/*
* note: we must run the query to get the count, but it will be cached for multiple paginates, so add comment to query
*/
$found_rows = $this->query("/* do not cache for {$this->alias} */ SELECT FOUND_ROWS();");
$count = array_shift($found_rows[0][0]);
return $count;
}
/**
* Overrkimlikden paginate method
*/
public function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) {
$options = array_merge(compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive'), $extra);
S: her nasılsa (paginateCount doğrudan $ cache_results_for_paginate alabilirsiniz)?
return $cache_results_from_paginateCount; // paginate in only 1 SQL stmt
return $this->find('all', $options); // kimlikeally, we could skip this call entirely
}