Autor Zpráva
andy_y
Profil *
Ahoj

Ve smarty potřebuji vypsat toto:

$result = $sql->res("SELECT * from sys_categories ORDER BY name ASC");
while($row = $sql->fetchRow($result)){
$result2 = $sql->res("SELECT neco WHERE kategorie = '$row[cat]' ");
$row2 = $sql->fechRow($result2);
}

Jeden SQL dotaz ve Smarty zvládnu, a to takhle:

$result = $sql->res("SELECT * from sys_categories ORDER BY name ASC");
while($row = $sql->fetchRow($result)){
$vys[] = $row;
}

$smarty->assign("vypis", $vys);

Což potom vypisuji takto:

{foreach from=$vypis key=i item=row}
{$row.0}
{/foreach}

Jak do toho, ale zakomponovat i ten druhý dotaz?
Warden
Profil
já bych tedy změnil ten dotaz na jeden, ale určitě by to šlo i se dvěma dotazy...jen si nenapsal, jak by sis představoval, že by to mělo vypadat...ten přístup k proměnné ve smarty
andy_y
Profil *
Také že to tak většinou řeším, jenže někdy to přes jeden dotaz nejde, nebo si to alespoň myslím.
Představoval bych si to asi takto:

$result = $sql->res("SELECT * from sys_categories ORDER BY name ASC");
while($row = $sql->fetchRow($result)){
$vys[] = $row;
$result2 = $sql->res("SELECT neco WHERE kategorie = '$row[cat]' ");
$row2 = $sql->fechRow($result2);
}

$smarty->assign("row1", $vys);
$smarty->assign("row2", $row2);

{foreach from=$row1 key=i item=row1}
Stl.tabulka 1 = {$row1.0}
Stl.tabulka 2 = {$row2.0}
{/foreach}
ninja
Profil
andy_y: Pozadovany dotaz jde jednoduse udelat pres jeden SELECT pomoci synataxe JOIN, je to jednoducha vazba 1:n.
andy_y
Profil *
ninja

já neřikám že nejde, říkám že v některých případech. Toto byl pouze náznak toho co bych chtěl na výstupu. Dokáže někdo poradit?
ninja
Profil
Vysledky obou dotazu si ukladej do jednoho vicerozmerneho pole:

$vysledek[$counter]['row1'] = $row;
$vysledek[$counter]['row2'][] = $row2;

a pak to vypis ve smarty:

{foreach from=$ysledek key=i item=row1}
Stl.tabulka 1 = {$row1[$i].0}
{foreach from=$row1[$i].row2 item=row2}
Stl.tabulka 2 = {$row2.0}
{/foreach}
{/foreach}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0