Sortierungs Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sortierungs Problem

    Hallo Leute,

    ich habe ein kleines Problem mit einer MySql-Abfrage. Ich versuche Daten in einer bestimmten Reihenfolge auszugeben was mir nicht gelingt. Dafür erstmal die Datenstruktur.


    id | hmp | ref | so
    1 | 1 | 0 | 1
    2 | 0 | 1 | 1
    3 | 0 | 1 | 2
    4 | 0 | 1 | 3
    5 | 1 | 0 | 2
    6 | 0 | 5 | 1
    7 | 0 | 5 | 2

    Die Datensätze sind teilweise als Hauptmenüpunkt (hmp) gekennzeichnet. Haben sie eine 1 sind sie ein Hauptmenüpunkt. Bei 0 sind sie ein Untermenüpunkt und mit dem Feld "ref" an die Hauptmenüpunkt- id gebunden. Die Spalte so gibt die Sortierreihenfolge an.

    Nun scheitere ich an der Abfrage um die Einträge in der richtigen Reihenfolge darzustellen. Gedacht ist das der erste "hmp" mit der "so = 1" zuerstabgefragt wird und danach die untermenüpunkte nach der "so" sortiert. Danach der hmp 2. Leider scheitere ich an dieser Abfrage, da ich keine 2 Whileschleifen hintereinander\ineinander haben will bzw ich den Join-Befehl nicht ausreichend kenne. Ich habe diverse Ansätze durchgekaspert und alle möglichen Sortierungen ausprobiert, bin aber zu keinen befriedigenden Ergebnis gekommen.

    Könnt ihr mir weiterhelfen?
    The Human Mirror - Mein Blog!
    www.sonicsense.de - The future of music!

  • #2
    ... habs jetzt nicht durchprobiert aber vom prinzip her, tabelle 2x selektieren, verknüpfen und dann " order by tbl1.so,tbl2.so"
    Rock on, Chummers
    DrNorton

    Kommentar


    • #3
      PHP-Code:
      SELECT ... 

      FROM tab t1 LEFT JOIN tab t2 ON t1.id t2.ref

      ORDER BY t1
      .so,t2.so 
      ---------------------
      Geändert t1.hmp -> id
      Zuletzt geändert von chansel0049; 05.07.2005, 10:49.
      chansel0049
      ----------------------------------------------------
      if you've reached the bottomline - dig further!
      Übersetzer gesucht? http://www.babelport.com

      Kommentar


      • #4
        Original geschrieben von DrNorton
        ... habs jetzt nicht durchprobiert aber vom prinzip her, tabelle 2x selektieren, verknüpfen und dann " order by tbl1.so,tbl2.so"
        Ich glaube das haut nicht hin, weil dann erst die hmp untereinander stehen und dann die untermenüpunkte bzw die reihenfolge dann irgendwie so aussehen würde:


        id | hmp | ref | so
        1 | 1 | 0 | 1
        5 | 1 | 0 | 2
        2 | 0 | 1 | 1
        6 | 0 | 5 | 1
        3 | 0 | 1 | 2
        7 | 0 | 5 | 2
        4 | 0 | 1 | 3
        The Human Mirror - Mein Blog!
        www.sonicsense.de - The future of music!

        Kommentar


        • #5
          Original geschrieben von chansel0049
          PHP-Code:
          SELECT ... 

          FROM tab t1 LEFT JOIN tab t2 ON t1.hmp t2.ref

          ORDER BY t1
          .so,t2.so 
          Diesen Ansatz hatte ich schon, allerdings mit t1.id = t2.ref, was beides nicht funktioniert.
          The Human Mirror - Mein Blog!
          www.sonicsense.de - The future of music!

          Kommentar


          • #6
            1. duch die Verknüpfung erhalten die unterpunkte für t1.so den Wert des Hauptpunktes
            2. Durch die Sortierung, die vor der Selektierung erfolgt, ´werden die DS erst nach t1.so,dann nach t2.so sortiert.

            Dadurch erhälst du was du brauchst, wenn die richtigen tabellenspalten im SELECT Stehen.

            Für die einfachste Verarbeitung per PHP wäre noch mit IF / CASE in SQL eine einfachere SELECT Struktur zu erzeugen ...


            -----------------------------------------------------------------
            Hattest natürlich recht mit der Verknüpfung t1.id=t2.ref
            Zuletzt geändert von chansel0049; 05.07.2005, 10:52.
            chansel0049
            ----------------------------------------------------
            if you've reached the bottomline - dig further!
            Übersetzer gesucht? http://www.babelport.com

            Kommentar


            • #7
              PHP-Code:
              SELECT t1.idt2.id
              ...
              ORDER BY t1.so,t2.so 
              oder
              PHP-Code:
              SELECT IF (ISNULL(t2.id), t1.idt2.idid ..
              ...
              ORDER BY t1.so,t2.so 
              damit ist die Sortierung schon korrekt (allein durch das JOIN)
              chansel0049
              ----------------------------------------------------
              if you've reached the bottomline - dig further!
              Übersetzer gesucht? http://www.babelport.com

              Kommentar

              Lädt...
              X