Autor Zpráva
Jcas
Profil
Už píšu asi třetí metodu a stále se mi něco nelíbí. Prosím o radu, jak to udělat dobře.
|--id--|--skupina--|--zvire--|--plemeno--| (např. 1, Drůbež, vodní drůbež, kacha Ruánská)

A nyní je úkolem zpracovat do selectů, aby si uživatel mohl vybrat. (co jsem už zkoušel)
1/ vybrat vše a pak nějak procházet a zpracovat pole. (zdá se mi to jako velký výběr dat a velké pole)(500-1000záznamů)
2/ Nějakým způsobem to rozložit na 2-3 mysql dotazy (to mi moc nejde)
3/ Napřed vybrat pouze `skupinu` a `zvire`, nechat vybrat z tohoto seznamu a pak znova volat server(odeslán form) a vybrat k tomu plemena(tj. dva selecty). Toto mi jde hezky, ale zase se mi to nelíbí.
4/ A nyní si pohrávám s myšlenkou pro každou skupinu vlastní select (to by se mi líbilo asi nejvíc), ale na jedno načítání stránky. A vůbec nevím jak na to. Je to asi zase otázka, jestli více nějakých sql dotazů.

Poradíte prosím?
Keeehi
Profil
Jcas:
Tohle není vůbec o databázi. Tohle je o návrhu aplikace. Resp o UX. Na tuhle část vůbec nepotřebuješ počítač. Jde o to vymyslet takový způsob ovládání, který bude jednoduchý, intuitivní a hezký. Až tedy budeš vědět co chceš udělat můžeš se ptát jak to udělat, ale podle popisu v té fázi ještě nejsi.
Jcas
Profil
Dobře, takže jak to udělat, aby výsledný kód byl:
<span>'skupina'</span><select><optgroup label="zvire"><option>"plemeno"</option>.....</optgroup>...</select>
- každá skupina bude mít svůj vlastní select
- zvire se vloží do optgroup
- plemeno bude položka seznamu

Jeden sql dotaz, nebo víc(poddotazy)? Už v cyklu while(když se prochází řádky tabulky) nějak zajišťovat zobrazování s echo? Nebo vybrat data, narvat do pole a pak procházením pole zajistit zobrazení?
Jcas
Profil
Nějaký výsledek mám, ale připadá mi to prostě špatné. Jedny a ty samé záznamy procházím dvakrát.
1. Když je beru z DB. (Beru každý jeden řádek)
while ($row = $result->fetch_assoc()) { 
   $zvire[ $row['skupina'] ][ $row['zvire'] ][ $row['id_zvirete'] ] = $row['plemeno'];
}
2. Procházím pole a to procházím každý ten záznam znovu.
foreach ($zvire as $skupina => $pole) {
   if ($i % COLS == 0) echo "<tr>";
   echo '<td><strong>'.$skupina.': </strong><br>'.
   zobrazSelect($opt = array('name' => $skupina, 'id' => $skupina), $pole).'</td>';
   if ($i % COLS == COLS - 1) echo "</tr>\n";
   $i++;
}
první pram fc zobrazSelect jsou atributy pro elemet <select>. Druhý pro <option>Pokud je druhý param jednoduché pole, tak je $key pro atributy elementu <option> a $hodnota pro obsah. Pokud je pole vícerozměrné, tak je $key pro <optgroup>, $key2 pro Atributy <option> a $hodnota pro obsah.

Je to dvojité prochází řádků. Možná nějak třeba zneužít oop a už při výběru dat vytvořit objecty, které se potom jenom zobrazí. Momentálně mi to připadá jako když zásobovač napřed navozí plné kastle piva a spátky k autu jezdí s prázdným rudlem a až to má hotové, tak jezdí s prázdným rudlem pro prázdné kastle s prázdnýma láhvema.
Keeehi
Profil
Ano, jde to udělat na jeden průchod a jen s pamětí dvou řádků a ne celé tabulky, ale dokud to nebude omezovat rychlost nebo nebude stačit paměť tak bych to tak nechal.

Jinak jde o tento problém. Jen ve třech úrovních místo dvou.
Jcas
Profil
Děkuju

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: