29. juni 2005 - 11:57Der er
2 kommentarer og 1 løsning
2. niveau i menu som udtræk fra tabel med inf. om 1. og 2. niveau
Har tabel menuData med felterne type (prime eller sub), menuId (1-6), og navn (menupunktet) samt url (linket fra menu til side):
type prime - menuId 1 - name Hvad er...? - url type sub - menuId 1 - name A... - url type sub - menuId 1 - name B... - url type prime - menuId 2 - name Hvorfor... - url type sub - menuId 2 - name H... - url type sub - menuId 2 - neme I... - url type prime - menuId 3 - name ... ...
Kan ikke få denne her til at virke - 2. niveaus select er i 1. niveaus while løkke, men åbenbart ikke korrekt:
$result = mysql_query( "SELECT m1.menuId as m1menuId, m2.menuId as m2menuId, m1.type as m1type, m2.type as m2type m1.name as name, m1.url as url FROM menuData as m1, menuData as m2 WHERE m1.menuId = m2.menuId AND m1.type != m2.type ");
Ideen er altså, at den sidste Select vha. tabel alias'er joines til sig selv, men for begge while'erne giver den "mysql_fetch_array(): supplied argument is not a valid MySQL result resource ".
Synes godt om
Slettet bruger
30. juni 2005 - 19:05#2
Jeg har lavet strukturer i den stil, hvor jeg har brugt felterne ID og ParentID til at holde styr på sammenhængen. Det giver også mulighed for mere end kun 2 niveauer, hvis der skulle være brug for det.
Man kan så vælge to forskellige metoder, når man skal hente det ud af databasen:
1) Hent hele svineriet på en gang og put det i et array. Derefter løbes arrayet igennem for at få det ud.
2) Først hent WHERE ParentID=0. Løb den igennem og for hver element hentes WHERE ParentID = $row[ID]
Hvis der ikke er alt for meget i databasen er nummer 1 den bedste metode, for så skal man ikke spørge databasen hele tiden. Hvis der derimod er en hel masse i databasen, og man normalt kun skal bruge et mindre udsnit af det, kan metode 2 være bedre.
Her er et kodeeksempel, hvor jeg går ud fra metode 1:
function displaymenu($parentid) { global $menu; if(array_key_exists($parentid,$menu){ echo '<ul>' foreach($menu[$parentid] as $menuitem){ echo '<li>'; echo "<a href='{$menuitem['url']}'>{$menuitem['name']}</a>"; displaymenu($menuitem['ID']); echo '</li>' } echo '</ul>'; } }
$res=mysql_query("SELECT * FROM menutabel"); while($row=mysql_fetch_assoc($res)){ $menu[$row['ParentID']][]=$row; } mysql_free_result($res);
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.