Hallo Leute,
ich muss das Thema noch einmal aufgreifen und bräuchte dazu etwas Hilfe von einem mysql Fachmann.
Mein Problem ist folgendes:
Für die Navigation auf meiner neuen Homepage (noch nicht Freigegeben, Zugang auf Anfrage) verwende ich eine dynamische Lösung bei welcher die Menüpunkte in Abhängigkeit der aufgerufenen Seite aus einer Datenbank generiert werden. Das funktioniert auch wunderbar, nur ein Problem habe ich jetzt dabei.
Wenn ich in die Tabelle neue Menüpunkte eintrage, so werden diese nicht im Untermenü an der richtigen Stelle angezeigt, sondern werden am Ende des Menüs angefügt. Die Menüpunkte sind in der Tabelle ähnlich wie die Punkte bei einer Aufzählung in einem Word-Dokument z.B. 5.8.1.3.2.0 usw. eingetragen, wobei für jede Stelle eine eigene Spalte vorhanden ist.
Beispiel:
5.8.1.3.2.0 ergibt dann
toptab = 5, subtab_1 = 8, subtab_2 = 1, subtab_3 = 3, subtab_4 = 2, subtab_5 = 0
[EDIT]
Habe den Code bei der Gelegenheit noch etwas optimiert (hat aber das Problem nicht gelöst)
Ausschnitt aus der navigation.php
Code: Alles auswählen
$sql_array = array(
'SELECT' => 'n.*, g.group_id, g.user_id',
'FROM' => array(
SVI_NAVIGATION_TABLE => 'n',
),
'LEFT_JOIN' => array(
array(
'FROM' => array(USER_GROUP_TABLE => 'g'),
'ON' => "n.tab_group_id = g.group_id AND g.user_id = $benutzer_id",
),
),
'WHERE' => "(
((n.toptab = $top_select) AND (n.subtab_1 = $sub_1) AND (n.subtab_3 = 0) AND (n.subtab_4 = 0))
OR
((n.toptab = $top_select) AND (n.subtab_1 = $sub_1) AND (n.subtab_2 = $sub_2) AND (n.subtab_4 = 0))
OR
((n.toptab = $top_select) AND (n.subtab_1 = $sub_1) AND (n.subtab_2 = $sub_2) AND (n.subtab_3 = $sub_3) AND (n.subtab_5 = 0))
OR
((n.toptab = $top_select) AND (n.subtab_1 <> $sub_1) AND (n.subtab_2 = 0) AND NOT ((n.toptab = $top_select) AND ((n.tab_group_id = 0) OR (n.tab_group_id = g.group_id)) AND (n.subtab_1 = 0)))
AND
($status = 0) AND (n.tab_active = 1))
",
'ORDER BY' => "n.toptab, n.subtab_1, n.subtab_2, n.subtab_3, n.subtab_4, n.subtab_5 ASC",
);
$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query($sql, 3600);
In der Tabelle sind die Daten der Reihe nach aufgelistet Z.B.
....
230 = 5.8.1.3.0.0
231 = 5.8.1.3.1.0
232 = 5.8.1.3.2.0
233 = 5.8.1.3.3.0
....
253 = 9.1.1.0.0.0
....
260 = 5.8.1.3.4.0 (neue Punkte)
261 = 5.8.1.3.5.0 (neue Punkte)
Wobei die tab_id fortlaufend ist, den PRIMARY Schlüssel trägt und ein auto_increment darauf liegt. Weitere Indezis werden nicht verwendet, da diese die Abfrage deutlich bremsen und auch in der Sortierung keine Änderung bewirken.
Wäre toll, wenn mir da jemand etwas helfen könnte.
Gruß Helmut
