Nechci LEFT JOIN, nechci 2× dotazy kvůli stránkování

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

Ahoj,

SQL:

	$selection = $this->model->findAll();
		if ($category !== NULL)
		{
			$selection->where("clanky_kategorie.seo_nazev", $category);
		}

Mi vytvoří

SELECT `clanky`.`id`, `clanky`.`clanky_kategorie_id`, `clanky`.`seo_datum`, `clanky`.`seo_nazev`,
`clanky`.`nazev`, `clanky`.`vydano`, `clanky`.`perex`
FROM `clanky`
LEFT JOIN `clanky_kategorie` ON `clanky`.`clanky_kategorie_id` = `clanky_kategorie`.`id`
WHERE (`clanky_kategorie`.`seo_nazev` = 'PHP')
ORDER BY `vydano` DESC
LIMIT 6

Moje otázka zní jak NDTB donutit, aby použila prostý JOIN a nikoliv LEFT JOIN. Vím, že v tomto případě LEFT JOIN nikdy potřebovat nebudu, v dokumentaci jsem o tom nic nenašel.

Druhá moje otázka zní.
V mém vlastním CMS jsem používal dibi.

Kvůli stránkování jsem nikdy nepokládal 2 dotazy, ale použil jsem SQL_CALC_FOUND_ROWS

SELECT SQL_CALC_FOUND_ROWS FROM tabulka 1 JOIN tabulka WHERE GROUP HAVING LIMIT // subselekty atd.

Nevím jak toho docílit v Nette, používam způsob Lazy a někde jsem se dočetl, že k „vykonání dotazu“ slouží „rewind“. Pokud jsem tedy měl něco jako, tak se to chovalo hrozně divně, vykonaný dotaz dle ověření v DB vrátil správné řádky, ale šablona vypisovala jen 2. Můžu se tedy zeptat, jak správně řešit stránkování v Nette? Nechci pokládat 2 dotazy a SQL_CALC_FOUND_ROWS asi používám špatně.

Díky

	$filters = array('per_page' => 6,
				'page' => $this->page);
		$selection = $this->model->findAll()->select("SQL_CALC_FOUND_ROWS *");
		if ($category !== NULL)
		{
			$selection->where("clanky_kategorie.seo_nazev", $category);
		}
		$selection->page($filters["per_page"], $filters["page"]);
		$this->template->posts = $selection;
		$this->template->posts->rewind();

		$totalRows = // FOUND_ROWS(); a další věci pak předáváné do šablony