Autor | Zpráva | ||
---|---|---|---|
mattyZEM Profil |
#1 · Zasláno: 6. 2. 2010, 19:18:05 · Upravil/a: mattyZEM
Ahoj, mám WHILE na nadpisy sekcí v menu, a WHILE na odkazy v menu, takto:
$sekceq=mysql_query("SELECT * FROM menu_sekce WHERE msprihlasen = '0' and msprava = '0'"); $menuq=mysql_query("SELECT * FROM menu_odkazy WHERE moprihlasen = '0' and moprava = '0'"); while($menu=mysql_fetch_assoc($menuq)){ if($menu['mosoubor'] == $soubor){$class =' class="active"';}else {$class='';} if($menu['motarget'] == 1){$target= ' target="blank"';}else {$target='';} $pole[] = $menu['mosekce']; $pole[] .= '<li'.$class.'><a href="'.$menu['mohref'].'"'.$target.'>'.$menu['moname'].'</a></li>'; } while($sekce=mysql_fetch_assoc($sekceq)){ $prvni=substr($sekce['msnazev'], 0, 1); $zbytek=substr($sekce['msnazev'], 1); $msid=$sekce['msid']; echo '<div class="menu_nadpis"><span class="menu_nadpis_prvni">'.$prvni.'</span>'.$zbytek.'</div>'; echo '<ul>'; foreach($pole as $odkaz){ if($odkaz[0]==$msid){ echo $odkaz[1]; } } echo '</ul>'; } Problém je v tom, že $odkaz[0] funguje (tj. to ID sekce [řádek #6]), ale $odkaz[1] (tj odkaz [řádek #7]) ne (na řádcích #17,18) Notice: Uninitialized string offset: 1 in .....\index.php on line X Sorry za název, za "odděleně" má být čárka, a lepší název mě nenapadl :( |
||
SwimX Profil |
#2 · Zasláno: 6. 2. 2010, 19:31:51 · Upravil/a: SwimX
Za to může asi řádek #7. Zruš tu tečku.
pole[] .= '<li'.$class.'><a href="'.$menu['mohref'].'"'.$target.'>'.$menu['moname'].'</a></li>'; Já to ale většinou dělám jinak: $sekceq=mysql_query("SELECT * FROM menu_sekce WHERE msprihlasen = '0' and msprava = '0'"); while($sekce=mysql_fetch_assoc($sekceq)){ $prvni=substr($sekce['msnazev'], 0, 1); $zbytek=substr($sekce['msnazev'], 1); echo '<div class="menu_nadpis"><span class="menu_nadpis_prvni">'.$prvni.'</span>'.$zbytek.'</div>'; echo '<ul>'; $menuq=mysql_query("SELECT * FROM menu_odkazy WHERE moprihlasen = '0' and moprava = '0' and mosekce = {$sekce['msid']}"); while($menu=mysql_fetch_assoc($menuq)){ if($menu['mosoubor'] == $soubor){$class =' class="active"';}else {$class='';} if($menu['motarget'] == 1){$target= ' target="blank"';}else {$target='';} echo '<li'.$class.'><a href="'.$menu['mohref'].'"'.$target.'>'.$menu['moname'].'</a></li>'; } echo '</ul>'; } Sice se provede hodně dotazů na db, ale zase se ušetří čas zpracováváním. Nejlepší by bylo načísto to rovnou celé seřazené v jednom SQL dotazu. Ale nikdy jsem se nad tím nezamyslel natolik, abych ho vyplodil, zkus o to požádat v kategorii databáze na webu, jistě někdo poradí. |
||
mattyZEM Profil |
#3 · Zasláno: 6. 2. 2010, 19:33:56
SwimX:
„Já to ale většinou dělám jinak:“ S prominutím to děláš blbě. Nejsem nějaký odborník, ale u tohoto budeš do sql cpát více příkazů než musíš, protože budeš zadávat Xkrát příkaz do sql navíc. Btw, pořád to nefunguje :( |
||
SwimX Profil |
#4 · Zasláno: 6. 2. 2010, 19:46:19
mattyZEM:
ano sql příkazů se provede víc, ale zase nebudu cpát všechno do pole a pak ho procházet v každé sekci celé znova a znova. težko říct co bude rychlejší, nejlepší by bylo to co píšu na konci příspěvku. má to být takle: místo obou řádek 6,7 dej tudle: $pole[] = array($menu['mosekce'], '<li'.$class.'><a href="'.$menu['mohref'].'"'.$target.'>'.$menu['moname'].'</a></li>'); |
||
mattyZEM Profil |
#5 · Zasláno: 6. 2. 2010, 19:48:09
SwimX:
„má to být takle“ Thank you sir. Jsi moje záchrana o.O |
||
Alphard Profil |
#6 · Zasláno: 6. 2. 2010, 19:55:43
Nebo takhle, je to skoro stejné, ale osobně se mi to líbí víc.
$pole[$menu['mosekce']][] = '<li'.$class.'><a href="'.$menu['mohref'].'"'.$target.'>'.$menu['moname'].'</a></li>'; // sem možná podmínku pro případ, že je daná sekce prázdná foreach($pole[$msid] as $odkaz){ echo $odkaz; } SwimX: „ale zase nebudu cpát všechno do pole a pak ho procházet v každé sekci celé znova a znova. težko říct co bude rychlejší“ Myslím, že procházení pole bude (do určité velikosti) podstatně rychlejší. Obecně se doporučuje minimalizovat počet dotazů na databázi. Vytahovat menu 10 dotazy při každém reloadu mi nepřipadá jako dobrý nápad. |
||
SwimX Profil |
#7 · Zasláno: 6. 2. 2010, 19:56:36
Alphard:
A co to dostat do jednoho dotazu, nešlo by to? :) |
||
mattyZEM Profil |
#8 · Zasláno: 6. 2. 2010, 19:57:09
Alphard:
„ale osobně se mi to líbí víc.“ Jediný důvod proč to použít a klidně to použiju :) |
||
Alphard Profil |
#9 · Zasláno: 6. 2. 2010, 20:05:31
SwimX:
„A co to dostat do jednoho dotazu, nešlo by to? :)“ Šlo by to, jestli je zájem. Ale mám bohužel zkušenost, že se člověk často snaží a tazatel nakonec stejně použije jednodušší řešení. Stačil by jednoduchý join a seskupení při výpisu. mattyZEM: „Jediný důvod proč to použít a klidně to použiju“ Nenutím vás. Psal jsem vám odpověď a před odesláním jsem zjistil, že SwimX byl rychlejší, toť vše. |
||
mattyZEM Profil |
#10 · Zasláno: 6. 2. 2010, 20:16:24
Alphard:
„Nenutím vás“ O to nejde, jen pokud je to v něčem lepší, tak to použiji. |
||
SwimX Profil |
#11 · Zasláno: 6. 2. 2010, 20:30:32
mattyZEM:
asi snažší orientace, protože stejně to pole musí mít nějaký klíč, tak proč mu nedat id položky. A pak nemusí být položka $pole pole, stačí string, takže menší zátěž. Asi je to lepší. |
||
Časová prodleva: 14 let
|
0