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

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>';

Работать-то работает, вот только стрем какой-то... Сомненья смутные меня тревожат - стоит-ли так поступать?
 
no_santa
старинная джедайская техника, можно :-)
 
ну как. мне вот обычно нужно было кол-во страниц прокрутки отображать. А для этого нужно знать, сколько всего итемов.
 
эм...
обычно узнают полное количество записей, затем их делят на количество записей на страницу и получают количество страниц
 
DYPA
если нужно сделать, как в ленте в твиттере или на стене фейсбука - то не нужно. достаточно лишь знать есть ли как минимум 1 запись после текущих, чтобы рисовать ли кнопку more или нет.
 
только при таком подходе использовать offset нельзя, следующая порция должны начинаться со следующей записи после последней.
WHERE id > $last или в зависимости от сортировки created_at > $last
LIMIT 0, $perPage
тогда не будем проскакивать записи, если появились новые
 
Сверху