Bedingte Sortierung
Jones
- datenbank
Leider weiß ich nicht nach was ich bei meinem Anliegen suchen soll, und eine Suche nach Begriffen wie "bedingte Sortierung" usw. hat nichts wirklich brauchbares gefunden.
Ich habe eine Tabelle für ein Webmenu mit
ID NAME PARENTID ORDER
1 Punkt1 0 1
1 Punkt2 0 2
3 Punkt3 0 3
4 Unterpunkt21 2 1
5 Unterpunkt22 2 2
6 Unterpunkt31 3 1
7 Unterpunkt32 3 2
Jetzt würde ich gerne über ein Select Statement das Menü mit dem 2. Menüpunkt ausgeklapt anzeigen lassen, also:
Punkt1
Punkt2
Unterpunkt21
Unterpunkt22
Punkt3
Wie bekomme is es also hin, dass der SQL Server beim auswerten nach PARENTID und ORDER ordnet, aber ab dem Datensatz mit ID=2 z.B. die Datensätze mit PARENTID=2 einschiebt?
Ist das einfach uns sinnvoll lösbar mit SQL oder ist es einfacher 2 querys laufen zu lassen und das ganze in php zusammen zu setzen
Hallo,
ID NAME PARENTID ORDER
1 Punkt1 0 1
1 Punkt2 0 2
3 Punkt3 0 3
4 Unterpunkt21 2 1
5 Unterpunkt22 2 2
6 Unterpunkt31 3 1
7 Unterpunkt32 3 2
Ist das einfach uns sinnvoll lösbar mit SQL oder ist es einfacher 2 querys laufen zu lassen und das ganze in php zusammen zu setzen
man kann es über SQL so lösen:
SELECT *,1 as is_parent FROM tblmenu WHERE ID <= [2] ORDER BY ORDER UNION SELECT *,0 as is_parient FROM tblmenu WHERE PARENTID=[2] ORDER BY ORDER UNION SELECT *,1 as is_parent FROM tblmenu WHERE ID > [2] ORDER BY ORDER
für die richtige anzeige ist das Feld is_parent.
ich würde es denke ich trotzdem in PHP realisieren.
Viele Grüße,
Tim
Ist das einfach uns sinnvoll lösbar mit SQL oder ist es einfacher 2 querys laufen zu lassen und das ganze in php zusammen zu setzen
Eher letzteres - und mit entsprechendem css anzeigen bzw. Ein und ausblenden.
Tach!
Wie bekomme is es also hin, dass der SQL Server beim auswerten nach PARENTID und ORDER ordnet, aber ab dem Datensatz mit ID=2 z.B. die Datensätze mit PARENTID=2 einschiebt?
Man kann einem ORDER BY auch einen Ausdruck angeben. In diesem kann man Funktionen wie IF() verwenden. Wenn du also deine Bedingung mithilfe der gegebenen Daten in exakten Worten formulieren und den Datensätzen Zahlen von 0 bis n zuweisen kannst, sollte dem Sortieren nichts im Wege stehen. Zur Not kannst du die Werte auch in einer berechnteten Spalte in der SELECT-Klausel ermitteln und nach dieser sortieren.
dedlfix.
Hallo,
Ich habe eine Tabelle für ein Webmenu mit
ID NAME PARENTID ORDER
Das sieht mir nach einem schönen Fall für *nested sets* aus :)
Gruß,
luti