NTD – group() a count() pro grid

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

Zdravím a prosím o radu:

mám takový kus kodu, připravující data pro grid s paginatorem. Pro paginator musim poslat COUNT a nedari se me to udelat tak, aby ten count pocital i s tim group().. vraci me stále, jakoby tam ten group() nebyl..

Jak na to prosím?

class PinvoicesModel extends BaseModel {

    public function getData($year) {
	return $this->database->table('vynosyo')->SELECT('vynosyo.id, clients.name AS client,
		    (SELECT SUM(vynosyo.uhrada) FROM vynosyo WHERE vynosyo.clients_id = clients.id AND MONTH(vynosyo.duzp) = 1 AND YEAR(vynosyo.duzp) = ' . $year . ') AS leden,
		    (SELECT SUM(vynosyo.uhrada) FROM vynosyo WHERE vynosyo.clients_id = clients.id AND MONTH(vynosyo.duzp) = 2 AND YEAR(vynosyo.duzp) = ' . $year . ') AS unor)
			....
			....')
		    ->where('vynosyo.type', 'MZDY')->where('YEAR(vynosyo.duzp)', $year)->group('vynosyo.clients_id');
    }

    public function prepareDataSource($filter, $year, $order = NULL) {

	$filters = array();
	foreach ($filter as $k => $v) {
	    if ($k == 'id' || is_array($v))
		$filters[$k] = $v;
	    else
		$filters[$k . ' LIKE ?'] = "%$v%";
	}

	$selection = $this->getData($year)->where($filters);
	if ($order[0])
	    $selection->order(implode(' ', $order));

	return $selection;
    }

    public function getDataSource($filter, $order, $year, Paginator $paginator = NULL) {
	$selection = $this->prepareDataSource($filter, $year, $order);
	if ($paginator) {
	    $selection->limit($paginator->getItemsPerPage(), $paginator->getOffset());
	}
	return $selection;
    }

    public function getDataSourceSum($filter, $year) {
	return $this->prepareDataSource($filter, $year)->count('*'); // zde vraci count ale bez group()
    }

CZechBoY
Člen | 3608
+
0
-

S tim groupem se ti bude blbě počítat řádky – spočítá to počet seskupených (sgroupovaných) ke každý skupině (groupě).
Udělej si dotaz na počítání výsledků zvlášť bez toho groupBy.

MW
Člen | 626
+
0
-

Myslíš, že by bylo spolehlivé něco jako

return $this->prepareDataSource($filter, $year)->count('DISTINCT clients_id');

nebo?

Díky!