Jones: Bedingte Sortierung

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

  1. 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

  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

    Eher letzteres - und mit entsprechendem css anzeigen bzw. Ein und ausblenden.

  3. 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.

  4. 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