Jak řešíte číslování řádků se stránkováním?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
maarlin
Člen | 207
+
0
-

Nevím nakolik je tenhle problém dibi a nakolik Nette, postuji ho sem…

Využívám Paginator z addons a dibi.

Problém je následující:
Mám nějaký datový model:

<?php
class Users extends BaseModel {
	public function getUsersList() {
		return $this->connection->select('*')->from('users');
	}
}
?>

Pokud chci rovnou nechat databázovou vrstvu očíslovat vrácené výsledky, musím do té metody přidat několik dalších parametrů a hlavně tím zcela přicházím o tu výhodu hrát si ještě dál se sestaveným dotazem v presenteru…

<?php
class Users extends BaseModel {
	public function getUsersList($offset, $limit, $orderingCol, $orderingDir = 'DESC') {
		$originalQuery = $this->connection->select('*')->from('users')->orderBy($orderingCol.' '.$orderingDir)->limit($limit)->offset($offset);
		return $this->connection->select('SELECT @rownum:=@rownum+1 [position], x.*, (%sql) x', (string)$originalQuery)->from('users')->from('(SELECT @rownum:=%i) r', $offset);
	}
}
?>

a pak to volat jako

<?php
$users = new Users;
$users->getUsersList($paginator->offset, $paginator->itemsPerPage, 'salary');
?>

Což mě prostě značně omezí a v případě že bych potřeboval v presenteru ještě nějak pozměnit podmínky výpisu, musím to opět přidat jako další parametr…

Jak to elegantně vyřešit? Dokáže dibi třeba nějak přistupovat k tomu subquery uvnitř?

Editoval maarlin (4. 4. 2011 13:07)

Michalek
Člen | 210
+
0
-

$users->getUsersList()->limit($lim)->offset($off) :)

Jestli je to z pohledu „dnešního přístupu“ správně, netuším.

Editoval Michalek (4. 4. 2011 13:10)

maarlin
Člen | 207
+
0
-

Michalek napsal(a):

$users->getUsersList()->limit($lim)->offset($off) :)

Jestli je to z pohledu „dnešního přístupu“ správně, netuším.

Asi jsem správně nepopsal ten problém… tohle ale připojí LIMIT klauzuli na konec toho dotazu – tzn. omezí už hotové, očíslované výsledky… já je potřebuji omezovat ještě před číslováním…

maarlin
Člen | 207
+
0
-

Jediné rozumné řešení, které mě napadlo, je prostě připojovat to číslování řádků až přímo v presenteru…

Filip Procházka
Moderator | 4668
+
0
-

A na co bys potřeboval číslovat řádky? Pokud chceš v nějakém přehledu záznamů pokračovat od určitého záznamu, tak od toho máš v paginátoru informaci na které si stránce a kolik záznamů máš na stránku.

{=($paginator->page-1)*$paginator->itemsPerPage + $iterator->counter}
kravčo
Člen | 721
+
0
-

Chápem správne, že chceš výsledky číslovať takto?

$offset
$offset + 1
...
$offset + $limit - 1