Problém s SQL dotazem – řetězení podmínek
- cerfotoc
- Člen | 14
Zdravím.
Dělám jednoduché fórum, kde vypisuji kategorie a počet témat. Počet témat mi to však vypíše správně pouze u první kategorie.
{foreach $categories as $category}
<tr>
<td>
<a n:href="topics $category->id"><strong>{$category->name}</strong></a><br />
{$category->description}
</td>
<td>{count($topics->where('category_id', $category->id))}</td>
</tr>
{/foreach}
Z laděnky jsem zjistil, že to pokládá na databázi špatné dotazy.
- dotaz: SELECT
id
FROMforum_topics
WHERE (category_id
= 1) - dotaz: SELECT * FROM
forum_topics
WHERE (category_id
= 1) AND (category_id
= 2)
atd.
Nevím, proč se tam vždy natahují a řetězí podmínky (where) z minulých dotazů. Používám Nette\Database.
Děkuji za radu, vím, že jde určitě o nějakou blbost, ale nějak se nemohu dostat dál z místa.
- Jan Mikeš
- Člen | 771
Je to tim, ze pro nove dotazy pouzivas stejnou promennou a vse delas pres puvodni dotaz.
Ty pouzivas neco takoveho:
$row = $this->context->xxx; // vrati ti Selection
$row->where("category_id", 1);
$row->where("category_id", 2);
Ty ale potrebujes toto:
$row = $this->context->xxx; // vrati ti Selection
$row->where("category_id", 1);
$row2 = $this->context->xxx;
$row2->where("category_id", 2);
V tvem pripade doporucuji pouzit https://api.nette.org/…tiveRow.html#…
Editoval Lexi (30. 8. 2012 14:42)
- mkoubik
- Člen | 728
Protože pracuješ stále s tím samým objektem $topics
.
Nejlepší řešení by bylo využít relaci té konkrétní kategorie a objekt
$topics
vůbec nepoužívat:
<tr n:foreach="$categories as $category">
<td>
<a n:href="topics $category->id"><strong>{$category->name}</strong></a><br />
{$category->description}
</td>
<td>{$category->related('forum_topics')->count()}</td>
</tr>
Nebo si ten objekt v každém cyklu klonovat (podle mě prasárna).