Zend_Paginator;

2 Cevap php

Ben projemde Zend_Paginator sınıfını kullanmak üzereyim. Ben internette sınıfının örnekleri bulundu. Bunlardan biri

$sql = 'SELECT * FROM table_name ';    
$result = $db->fetchAll($sql);    
$page=$this->_getParam('page',1);    
$paginator = Zend_Paginator::factory($result);   
 $paginator->setItemCountPerPage(10));   
 $paginator->setCurrentPageNumber($page);   
 $this->view->paginator=$paginator;

İlk satırda, aslında table_name tüm satırları seçin. Ne 50000 satırlık bir tablo varsa? Bu çok verimsiz olur.

Zend paginator kullanmak için başka bir yolu var mı?

2 Cevap

Bu sorun hakkında, sen Kılavuzun bu bölümünde tarafınızdan ilgi olabilir: 39.2.2. The DbSelect and DbTableSelect adapter , which states (quoting, emphasis mine):

... the database adapters require a more detailed explanation.
Contrary to popular believe, these adapters do not fetch all records from the database in order to count them.

Instead, the adapters manipulates the original query to produce the corresponding COUNT query.
Paginator then executes that COUNT query to get the number of rows.

This does require an extra round-trip to the database, but this is many times faster than fetching an entire result set and using count().
Especially with large collections of data.

(There is more to read on that page -- and there is an example that should give you more information)


The idea is that you will not fetch all data yourself anymore, but you'll tell to Zend_Paginator which Adapter it must use to access your data.

Bu Adaptörü "Data that is fetched via an SQL query" özgü olacak ve veritabanı tarafında doğrudan sayfalandırmamayı nasıl bilecek - gereklidir sadece ne getiriliyor demektir, ve initialy yaptığı gibi tüm verileri.

Ben bir Zend_Db_Select nesnesini ileterek Zend_Paginator::factory($select); ziyade bir sonuç satırkümesi geçen öneririz. Aksi takdirde, tüm sonuç kümesini seçiyoruz ve ardından pagination yapıyor. Eğer bir milyon satır olsaydı geçerli çözüm olarak, size geçerli sayfanın tarafından tanımlanan satır öbek almadan önce hepsini seçmek istiyorum.