Sortierung von Kategorien

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Sortierung von Kategorien

Beitrag von mgutt »

Wenn ich etwas sortiert haben möchte (Artikel, Beiträge, Bilder etc.), dann kann ich sie Kategorien zuweisen.

Nun habe ich mir schon was geschrieben womit ich Kategorien anlegen kann.

Weiterhin habe ich ein Feld angelegt, damit ich die Kategorie einer "Hauptkategorie" zuweisen kann. Aber wie bekomme ich da eine Reihenfolge rein? Ich könnte zwar bei der Ausgabe alphabetisch sortieren, aber das will ich nicht unbedingt.

Wie kann ich das mit der Sortierung hinkriegen? In phpBB werden anscheinend zufällige Zahlen für die Reihenfolge der Foren generiert... :-?

Die Kategoriestruktur habe ich so gewählt:

Code: Alles auswählen

Id   Name                    Reihenfolge Hauptkategorie
8  Würstchen                      0              7 
7   Fleisch                       0              0
Bei der Ausgabe werde ich dann als Hauptkategorie alle die erkennen, wenn Sie im Feld eine 0 haben.

Eine Unterkategorie wird dann entsprechend der Hautpkategorie ID zugewiesen (so die Planung ;) )
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Spezial
Mitglied
Beiträge: 135
Registriert: 15.07.2004 08:53
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Spezial »

Das würde mich auch mal interessieren wie man Inhalte einer MySQL-Tabelle sortieren kann, oder wie phpBB das macht... ^^
Wenn Chuck Norris ins Wasser fällt, wird er nicht nass…aber das Wasser wird Chuck Norris.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Spezial hat geschrieben:Das würde mich auch mal interessieren wie man Inhalte einer MySQL-Tabelle sortieren kann, oder wie phpBB das macht... ^^
naja sortieren kannst du ja mit "ORDER BY id ASC" z.b. um nach id absteigend zu sortieren. mir geht es aber um eine eigene sortierungsmöglichkeit.

gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Lass doch einfach mal von MySQL nach dem Reihenfolge-Feld sortieren und pack beim Auslesen die entsprechenden "Subkategorien" in die Kategorien:

Code: Alles auswählen

$kategorien = array();
while ($row = mysql_fetch_assoc($result))
{
  if ($row['Hauptkategorie'] == 0)
  {
    $kategorien[$row['Id']] = $row;
    $kategorien[$row['Id']]['sub'] = array();
  }
  else
  {
    $kategorien[$row['Hauptkategorie']]['sub'][] = $row;
  }
}
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Dennis63
Ehemaliges Teammitglied
Beiträge: 2597
Registriert: 02.07.2003 18:46

Beitrag von Dennis63 »

Das kommende phpBB3 sortiert so:

Es gibt in der Datenbank dafür drei Spalten:

- "Parent_ID" - für die Übergeordnete Kategorie
- "left_id" - Bestimmt die vorherige Kategorie
- "right_id" - Nur Platzhalter, wichtig im ACP.

Das ist dann so aufgebaut, daß jede Zeile mit der "Parent_id" ihrer Übergeordneten Kategorie zugeordnet ist. Also ein Forum hat in Parent_id immer die ID der jeweiligen Kategorie.

Und jetzt wirds Kompliziert mit left_id und right_id...

Nehmen wir an, wir haben eine Kategorie mit zwei Foren da drinne:

- Die erste Kategorie bekommt bei Left_ID eine 1 - Weils halt die erste ist.
- Sollte ein Unterforum existieren, wird mit diesem Weitergemacht.
- Das 1. Forum bekommt die Left_id eine 2.
- Da kein weiteres Unterforum existiert, kommt die 3 bei "right-id" rein.
- Das nächte Forum bekommt jetzt die 4 auf left-ID
- Da kein weiteres Unterforum existiert, kommt die 5 bei "right-id" rein.
- Jetzt existiert auch kein weiteres Unterforum mehr für die Kategorie. Also bekommt die bei right_id eine 6.

Die Zahl muss immer fortlaufend sein, es darf nichts doppelt vorkommen und keine Zahl ausgelassen werden.

Das ganze kann so weitergeführt werden. Nachher muss man das ganze nur mit ORDER BY left_id sortieren und hat die Reihenfolge. Und dann stimmt auch das parent_Id automatsich.

Die right_id ist nur im Admin-Panel interessant. Möchte ich nämlich ein neues Forum zur Kategorie 1 anlegen, sehe ich in right_id die 6. Also erhöhe ich erst mal alles, was in Left_Id 7 oder größer ist um zwei. (7 und 8 sind somit frei).
Dann bekommt das neue Forum die Left_id 6, right_id 7 und die right_id der Kategorie wird auf 8 gesetzt.

Auch wenn ich die Reihenfolge ändern möchte ist die Right-ID gut. Möchte ich die Kategorie mit der ID1 mit dit der Kategorie mit der ID 7 vertauschen, sehe ich über die left_id und right_id welche Unterforen ich gleich mit ändern muss. Für die Kategorie 1 wären das jetzt 1 bis 8.

Das ganze war jetzt sehr trocken, aber ich denke wer DB-Zugriff zu einem phpBB3 hat, wird es nachvollziehen können.


Grüße
Dennis
Benutzeravatar
Spezial
Mitglied
Beiträge: 135
Registriert: 15.07.2004 08:53
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Spezial »

mgutt hat geschrieben:naja sortieren kannst du ja mit "ORDER BY id ASC" z.b. um nach id absteigend zu sortieren. mir geht es aber um eine eigene sortierungsmöglichkeit.
das mein ich nicht. ich meine das, wo du z.B. auch im acp, die kategorien nach oben und unten verschieben kannst ;)
Wenn Chuck Norris ins Wasser fällt, wird er nicht nass…aber das Wasser wird Chuck Norris.
Dennis63
Ehemaliges Teammitglied
Beiträge: 2597
Registriert: 02.07.2003 18:46

Beitrag von Dennis63 »

Ich hatte das "Abbildung 7.3: Baumdarstellung im Nested Set Modell" in Chriss' Modell hatte ich beschrieben... ;)

Grüße
Dennis
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Dennis Böge hat geschrieben:Ich hatte das "Abbildung 7.3: Baumdarstellung im Nested Set Modell" in Chriss' Modell hatte ich beschrieben... ;)

Grüße
Dennis
Das ist nicht ohne. Werde mir das mal in der Alpha/Beta von Olympus anschauen.
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Leuchte
Ehemaliges Teammitglied
Beiträge: 9179
Registriert: 26.05.2003 14:57
Wohnort: Duisburg
Kontaktdaten:

Beitrag von Leuchte »

Spezial hat geschrieben:Das würde mich auch mal interessieren wie man Inhalte einer MySQL-Tabelle sortieren kann, oder wie phpBB das macht... ^^
phpBB vergibt beispielsweise bei Foren eine Zahl, angefangen bei 10 und immer + 10 bei weiteren Foren.

Code: Alles auswählen

forum_id | forum_order
1 | 10
2 | 20
3 | 30
Wird Forum Nr. 2 nach oben geschoben, passiert über einen Link (admin_forums.php; Zeile ~864 ) folgendes:
Bei forum_order werden 15 subtrahiert (bei "nach unten" 15 addiert). Damit sieht die Tabelle nun so aus:

Code: Alles auswählen

forum_id | forum_order
1 | 10
2 | 5
3 | 30
Anschliessend werden die Foren über die Funktion renumber_order neu angeordnet.
Dort werden alle Foren, absteigend nach forum_order (und somit Forum Nr. 2 in unserem Fall als erstes) ausgelesen.
In dieser Reihenfolge wird forum_order aktualisiert, angefangen mit 10 und + 10 bei jedem weiterem Forum

Code: Alles auswählen

forum_id | forum_order
2 | 10
1 | 20
3 | 30
Genauso läuft es mit der Anordnung der Kategorien ab
Antworten

Zurück zu „Coding & Technik“