tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
408
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von zyro
    zyro zyro ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Ort
    Remscheid
    Beiträge
    90
    Hallo,

    ich stehe hier vor einem Problem, dass hoffentlich auch einfacher zu realisieren ist als ich es mir denke.
    Und zwar habe ich in einer DB Kategorien stehen, die wie ein Inhaltsverzeichnis aufgebaut sind, d.h.

    1.0 Kategorie 1
    1.1 nächste Kategorie
    1.1.2 usw.
    1.2.1 usw.

    Mein Problem ist, dass ich die Daten nun anhand der Strukturnummer sortieren will, wie es oben schon ist, denn wenn an einer Stelle z.B. eine zweistellige Zahl steht dann macht die Standardsortierung sowas:

    1.0 Kategorie 1
    1.1 nächste Kategorie
    1.1.2 usw.
    10.1.3 usw.
    2.2.1 usw.

    Hat da jemand eine "einfach" Lösung für. (Meine Idee wäre jetzt den String zu zerlegen und dann rekursiv sortieren, ist aber irgendwie soviel arbeit...)
     

  2. #2
    soyo soyo ist offline Mitglied Brillant
    Registriert seit
    Apr 2006
    Beiträge
    794
    Musst du mit diesen Daten so arbeiten oder kannst du noch etwas am Datenbank-Design verändern? Es gibt nämlich einige Ansätze mit dem du das Problem schon vorher umgehen kannst.
     
    Aktuelle Zertifizierung: MCP 70-270, CCNA
    In Arbeit: 70-291, 70-290, 70-284, 70-293, 70-294, 70-298

  3. #3
    Avatar von zyro
    zyro zyro ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Ort
    Remscheid
    Beiträge
    90
    Am Datenbank-Design kann ich machen was ich will.
     

  4. #4
    soyo soyo ist offline Mitglied Brillant
    Registriert seit
    Apr 2006
    Beiträge
    794
    Die "einfache" Variante. Du speicherst dir zu jeder Kategorie die ID der "Eltern"-Kategorie:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    ID | Kategorie            | parent
    ---------------------------------
    0  | Inhaltverzeichnis    | NULL
    1  | 1.0.0            | 0
    2  | 1.1.0            | 1    
    3  | 1.1.2            | 2
    4  | 1.2.1            | 1
    5  | 10.0.0               | 0
    5  | 10.1.1           | 5
    6  | 10.1.5           | 5

    Das Ergebnis wäre:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    Inhaltverzeichnis
     -1.0.0 
       -1.1.0
        -1.12
     -10.0.0
      -10.1.1
      -10.1.5

    Oder du arbeitest mit einem Nested Set. Wobei man sich dort etwas einarbeiten muss.

    Gruß Thomas
     
    Aktuelle Zertifizierung: MCP 70-270, CCNA
    In Arbeit: 70-291, 70-290, 70-284, 70-293, 70-294, 70-298

  5. #5
    Avatar von zyro
    zyro zyro ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Ort
    Remscheid
    Beiträge
    90
    Zitat Zitat von soyo Beitrag anzeigen
    Die "einfache" Variante. Du speicherst dir zu jeder Kategorie die ID der "Eltern"-Kategorie:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    ID | Kategorie            | parent
    ---------------------------------
    0  | Inhaltverzeichnis    | NULL
    1  | 1.0.0            | 0
    2  | 1.1.0            | 1    
    3  | 1.1.2            | 2
    4  | 1.2.1            | 1
    5  | 10.0.0               | 0
    5  | 10.1.1           | 5
    6  | 10.1.5           | 5
    Das hatte ich mir auch schon gedacht, aber ist es dann nicht so, dass dies die Kinderelemente nicht mehr sortiert, im obigen Beispiel haben 10.1.1 und 10.1.5 die gleiche parent id, was wenn diese jetzt anders in der db stehen, dann würde es doch zuerst 10.1.5 und dann 10.1.1 ausgeben oder sehe ich das falsch?
     

  6. #6
    soyo soyo ist offline Mitglied Brillant
    Registriert seit
    Apr 2006
    Beiträge
    794
    Ich habe jetzt etwas rumprobiert und bin bisher zu keiner Lösung gekommen. Eventuell könntest du die Position einfach mit abspeichern?
     
    Aktuelle Zertifizierung: MCP 70-270, CCNA
    In Arbeit: 70-291, 70-290, 70-284, 70-293, 70-294, 70-298

  7. #7
    Avatar von zyro
    zyro zyro ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Ort
    Remscheid
    Beiträge
    90
    Dann wirds aber wieder etwas redundant.
     

  8. #8
    Rene42 Rene42 ist offline Mitglied Gold
    Registriert seit
    Jan 2007
    Beiträge
    202
    Du machst einfach für den Punkt 1.0.2.4 vier Spalten erste 1, zweite 0 und so weiter, dann zunächst nach der ersten sortieren, dann nach der zweiten, und so fort.
     

  9. #9
    Avatar von zyro
    zyro zyro ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Ort
    Remscheid
    Beiträge
    90
    Zitat Zitat von Rene42 Beitrag anzeigen
    Du machst einfach für den Punkt 1.0.2.4 vier Spalten erste 1, zweite 0 und so weiter, dann zunächst nach der ersten sortieren, dann nach der zweiten, und so fort.
    Vielen Dank, aber es sollte alles Skalierbar sein, d.h. es sind auch sehr tiefe Verschachtelungen wie ganz einfache möglich.
    Außerdem will ich die Datenbank nicht unnötig aufblähen.
     

  10. #10
    Adrian_Broher Adrian_Broher ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    166
    In dem Fall solltest du dich mal mit Nested Set Model beschäftigen.
     
    I'm not slacking off!

    My code's just compiling.

  11. #11
    Avatar von zyro
    zyro zyro ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Ort
    Remscheid
    Beiträge
    90
    Vielen Dank, ich habe es jetzt doch mit parentId und der jeweiligen Position gemacht. War jetzt die einfachste und schnellste Lösung.
     

Ähnliche Themen

  1. MySQL-Abfrage nach 2 Kategorien sortieren
    Von smoothart im Forum PHP
    Antworten: 24
    Letzter Beitrag: 08.09.11, 11:16
  2. Antworten: 4
    Letzter Beitrag: 04.09.10, 07:33
  3. Antworten: 5
    Letzter Beitrag: 24.09.08, 00:10
  4. MySQL Ausgabe in Kategorien Sortieren...
    Von StarboyCelli im Forum PHP
    Antworten: 1
    Letzter Beitrag: 13.05.08, 23:10
  5. Antworten: 21
    Letzter Beitrag: 12.02.04, 17:24