Pole rekurzí do selectboxu

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

Dobrý den, chtěl bych poradit, jak udělat pomocí nette a dibi nejlépe pole do selectboxu.
SQL tabulka není řešena nejlépe, jde o rekurze.

tabulka má sloupce ID | NAZEV | PARENT

Portřebuji to do selectboxu využít tak, aby to, co má parent NULL bylo jako optgroup a to, co má rodiče mělo jako value svoje ID.

<optgroup>Kategorie</optgroup>
<option value=‚moje_id‘>muj_nazev</option>

Vím, že se to dá řešit rekurzí, ale přijde mi hloupé co jeden rodič to další sql dotaz na potomky. Děkuji

Ot@s
Backer | 476
+
0
-

Jack06 napsal(a):

Vím, že se to dá řešit rekurzí, ale přijde mi hloupé co jeden rodič to další sql dotaz na potomky. Děkuji

Obecně máš 3 možnosti:

  1. rekurzivní fce v PHP nebo relační DB s podporou dotazů do stromů
  2. fce./metodou v PHP, která zavolá 1 SQL dotaz a „složí“ ho do pole strom[parent][id] = db_row
  3. pomocné informace, které Ti umožní získat strom pomocí 1-ho SQL dotazu – nedávno se to řešilo zde

Výše uvedené metody by se daly „podpořit“ kešováním výsledku. Vše záleží od velikosti stromu a frekvencí práce nad ním. Tím že strom chceš dávat do selectu formu bych to moc neřešil a zvolil nejjednodušší způsob (umístěním řešení do metody modelu můžeš později bez bolesti refaktorovat).

Jack06
Člen | 168
+
0
-

Nu jde o to, že jsem se to nějakým způsobem snažil řešit ale nedařilo se mi. Vždy jsem narazil na nějaký problém jako duplicate key, nebo s vložením stringu do pole a podobné. Jednoduše se mi nepodařilo to pole poskládat z jednoho dotazu do array[parent_id][id] = nazev; občas mi to bralo to id jako pozici ve stringu :-D jelikož ti parenti mají také název :-D