我在做對嗎?我去看了一些舊的PHP代碼w/MySQL,我設法讓它工作,但我想知道是否有一個「更乾淨」和「更快」的方式來完成這一點。如何正確使用mongodb和php處理分頁查詢?
首先,我需要得到「文件」
$total_documents = $collection->find(array("tags" => $tag,
"seeking" => $this->session->userdata('gender'),
"gender" => $this->session->userdata('seeking')))->count();
$skip = (int)($docs_per_page * ($page - 1));
$limit = $docs_per_page;
$total_pages = ceil($total_documents/$limit);
//查詢來填充數組,所以我可以分頁顯示
$data['result'] = $collection->find(array("tags" => $tag,
"seeking" => $this->session->userdata('gender'),
"gender" => $this->session->userdata('seeking')))->limit($limit)->skip($skip)->sort(array("_id" => -1));
我的問題是,我可以運行的總數查詢在一個鏡頭?我基本上運行相同的查詢兩次,除了第二次我傳遞值跳過記錄之間。
- 新的代碼...
好了,除非有人知道的另一種方式來做到這一點(如果可能的話),我會說這是不可行的。就這樣說,我改變了通過mongodb運行查詢的方式,從而產生了更好看的代碼。 ;-)我試圖儘量減少到DB的旅程,但是很希望這不會影響性能。我的另一個嘗試是計算陣列中元素的數量,但很快發現這是行不通的,因爲$ limit & $ skip參數會給出它的文檔總數。
$skip = (int)($docs_per_page * ($page - 1));
$limit = $docs_per_page;
$query = array("loc" => array('$near' => array('lat' => $latitude, 'lon' => $longitute)),
"tags" => $tag, "seeking" => $this->session->userdata('gender'),
"gender" => $this->session->userdata('seeking'));
$fields = array("username", "zipcode", "tags", "birth_date");
$total_documents = $collection->find($query, array("_id"))->count();
$data['result'] = $collection->find($query, $fields)->limit($limit)->skip($skip);
不應該跳過來限制之前? – Chamila 2013-05-01 16:11:35