MySQL Menutabelle - Menupunkte ausblenden

baserider

Well-known member
ID: 174417
L
10 März 2007
682
23
Hi,

hier mal ein Ausschnitt der Tabelle



Uploaded with ImageShack.us

ich will gern alles mit parent_id=7, id=7 und id=10 ausblenden, da das an eine andere Stelle der Seite kommt und nicht mit ins Menu soll.

Gibt es da evtl. noch eine bessere Lösung als mit WHERE id NOT IN (7,10) AND parent_id != 7, um diese Punkte auszublenden? In der Umkehrung muss ich ja später alle Menüpunkte ausblenden, die ich jetzt einblende. Ich würde gern alles etwas zusammenfassen, also Gruppen machen, dann würden alle id von obe eine Gruppe haben. Ist das sinnvoll?
Es gbt ja auf der Seite eine Usermenu, Hauptmenu und eins für Metanavi.
 
Mach halt n Visible-Flag rein.

Für Gruppen ne neue Tabelle plus FK in deine aktuelle Tabelle rein. Dann kannst du auch einer Gruppe n Visible-Flag zuordnen.

Ob das sinnvoll is? - musst du wissen, is keine Frage von Sinn oder Unsinn, sondern was du haben willst ;)
 
Hi,

wofür is das Flag gut?
Hab das nun mal mit ner neuen Tabelle für die Gruppen gemacht, und nun muss ich nur noch die id der entsprechenden Gruppe abfragen und nicht so umständlich wie vorher :)

Wenn ich also die Hauptnavi anzeigen lassen will, wird auf die Gruppe Hauptnavi gefiltert usw...
 
Hi,

hatte es ja auch nich böse gemeint .-)
aber mit dem Flag wird doch dann immer etwas auf sichtbar / unsichtbar gesetzt oder?
Ich will ja nur an der jeweiligen stelle die richtige gruppe anzeigen, das klappt eigenltich mit der abfrage ganz gut, da ich a imer die entsprechende id für die abfrage benutze
 
ich habe eine menutabelle mit allen links. nun gibt es 3 bereiche und je nach bereich sollen andere links angezeigt werden. die hauptnavi = gruppe1, metanavi = gruppe2 und usernavi (nach einloggen) = gruppe3

in jedem bereich lese ich eine andere gruppe aus. Dafür schreibe ich mir einfach die id der gruppe in die abfrage
 
Achso. Ok, kapiert :)

Dann versiehst du jeden Menüeintrag mit einem Enum-Value, wie schon in Post #2 vorgeschlagen. Du kannst dir dann aber die extra Tabelle sparen.
Da du eine Baumstruktur hast, musst du dir nur überlegen, was für dich cleverer is:
  • nur den Root-Knoten einer Gruppe markieren
  • alle Knoten einer Gruppe markieren
 
Hi,

achso du meinst in die Menütabelle noch ne Spalte z.B. menuart wo dann drinsteht 'usermenu', 'hauptmenu','metamenu' ?

da hast du recht, dann kann ich die tabelle rauswerfen. eigentlich sollten dann alle knoten markiert werden, dann kann ich einfach in der abfrage filtern: WHERE menuart = ....
 
achso du meinst in die Menütabelle noch ne Spalte z.B. menuart wo dann drinsteht 'usermenu', 'hauptmenu','metamenu' ?
Richtig. Kostet nur 2 Bit. Und da dies ja quasi eine "Systemeigenschaft" is, können auch keine weiteren Typen mehr hinzukommen.
eigentlich sollten dann alle knoten markiert werden, dann kann ich einfach in der abfrage filtern: WHERE menuart = ....
Dürfte wohl am besten sein, weil nur das Root-Element holen und durchhangeln zieht ne Menge an Folgeabfragen nach sich. So holst du alles und baust den Baum dann in Ruhe in der Anwendung auf. Navigation ändert sie wohl eh ned häufig, drum machst du das wohl eh nur einmal; danach würd sich n Cache anbieten.
 
hi,

ich danke die wie sau :)

Achja, wann sollte man denn so einen enum Wert nehmen und wann eine Extra-Tabelle mit Gruppen? Ich benötige diese Gruppen ja in diesem Fall gar nicht, daher leuchtet das enum-Feld ein :)

Wenn ich aber zum Beispiel einen Menüpunkt in 2 Bereichen anzeigen lassen will (z.B. Impressum im Hauptmenü und Metamenu), dann ist anscheind die Datenbank besser oder?
 
Achja, wann sollte man denn so einen enum Wert nehmen und wann eine Extra-Tabelle mit Gruppen? Ich benötige diese Gruppen ja in diesem Fall gar nicht, daher leuchtet das enum-Feld ein :)
Grundsätzlich is das Design bei sowas immer:
  • Tabelle Menüpunkte
  • Tabelle Gruppe
  • 1:N-Beziehung zwischen beiden
Wenn du jetzt aber keine echten Gruppen hast, weil das alles fest im System verankert is, kannst du dir die Gruppentabelle natürlich sparen.
Wenn ich aber zum Beispiel einen Menüpunkt in 2 Bereichen anzeigen lassen will (z.B. Impressum im Hauptmenü und Metamenu), dann ist anscheind die Datenbank besser oder?
Dann müsstest im Moment du den Menüpunkt unschön einfach doppelt eintragen.

Alternative wäre die M:N-Beziehung, wo du dir natürlich die zweite (von den dreien) Tabelle wieder sparen kannst. Die dritte Tabelle hätte dann keine Kombination aus zwei FKs, sondern nur einen FK und die Enum-Spalte, die die Gruppe des Menüpunkts angibt.