Я правильно делаю? Я пошел посмотреть на какой-то старый код PHP с MySQL и мне удалось заставить его работать, однако мне интересно, есть ли гораздо более «чистый» и «более быстрый» способ сделать это.
Сначала мне нужно получить общее количество «документов»
$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, что привело к получению лучшего кода. ;-) Я пытался свести к минимуму количество посещений БД, но, надеюсь, это не повлияет на производительность. Другой моей попыткой было подсчитать количество элементов в массиве, но быстро обнаружил, что это не сработает, так как параметры $ limit & $ skip дадут ITS общее количество документов.
$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);