Насколько аморально решение?

no_santa

Снегур
Насколько аморально решение?

В таблице весьма много данных, и программа должна делать очень много разных выборок по очень разным критериям. "Количество страниц" показывать не надо, но разбивать вывод конечно нужно. Для этого придумалось такое решение... Делаю выборку по критерию, с количеством элементов, на один больше, чем требуется. Далее проверяю - существует-ли последний элемент. Если есть, выталкиваю его, и даю ссылку "Дальше".

В контроллере:
PHP:
$this->db->limit(($this->config->item('per_page')*$page),$this->config->item('per_page')+1);
$more = FALSE;
$list = $this->db->get($profile);
if ($list) 
	if (count($list) == ($this->config->item('per_page')+1)) { // не последняя
		array_pop($list);
		$more = TRUE;
		}
В отображении
PHP:
if ($more)
	echo '<a href="'.$url.'/'.($page+1).'">'.$this->lang->line('more').'</a>';
Работать-то работает, вот только стрем какой-то... Сомненья смутные меня тревожат - стоит-ли так поступать?
 

zerkms

TDD infected
Команда форума
no_santa
старинная джедайская техника, можно :)
 

crocodile2u

http://vbolshov.org.ru
ну как. мне вот обычно нужно было кол-во страниц прокрутки отображать. А для этого нужно знать, сколько всего итемов.
 

DYPA

Настоящая dypa (c)
эм...
обычно узнают полное количество записей, затем их делят на количество записей на страницу и получают количество страниц
 

zerkms

TDD infected
Команда форума
DYPA
если нужно сделать, как в ленте в твиттере или на стене фейсбука - то не нужно. достаточно лишь знать есть ли как минимум 1 запись после текущих, чтобы рисовать ли кнопку more или нет.
 

AmdY

Пью пиво
Команда форума
только при таком подходе использовать offset нельзя, следующая порция должны начинаться со следующей записи после последней.
WHERE id > $last или в зависимости от сортировки created_at > $last
LIMIT 0, $perPage
тогда не будем проскакивать записи, если появились новые
 
Сверху