Page 1 of 1

Funktion: cat*_left / cat*_right in Tabelle präfix_category

Posted: Sun Sep 16, 2007 1:28 am
by Big-Tux
Hi,

ist vielleicht etwas ungewöhnlich die Frage aber ich importiere gerade Daten aus meiner Datenbank und will nicht alle 54 Unterkategorien einer Oberkategorie per Hand erstellen und die 8.778 Einträge zu den Unterkategorien erst recht nicht.

Deshalb schreib ich mir ein Script dafür, nun hab ich ein Problem nämlich die Spalten category_left und category_right in der Tabelle [präfix]_category ich versteh die Funktionsweise nicht ganz 100%ig und will nicht das Script durchforsten. Ich muß einfach nur wissen wie ich diese beiden Spalten zählen und eintragen muß.

Ich hab schon bemerkt das dabei dann auch die Oberkategorie eine Rolle spielt. Also ich denk mir das so... Bsp.:

Code: Select all

Kategorie '5' und '6' sind Unterkategorien von Kategorie '4'

Kategorie '4' hat *_left '7' und *_right '12' // Oberkategorie

Kategorie '5' hat *_left '8' und *_right '9' // Unterkategorie 1

Kategorie '6' hat *_left '10' und *_right '11' // Unterkategorie 2

Also das die *_left und *_right von 5 und 6 genau zwischen denen von 4 liegen.
Denke ich jetzt richtig das wenn ich die Kategorien '21' - '75' als Unterkategorien von Kategorie '20' eintragen will, Kategorie '20' sein *_left von '39' behält und das *_right von '40' auf '148' gesetzt werden muß und die Kategorien '21' bis '75' jeweils dann wie bei Kategorie '5' und '6' immer eins hoch gezählt werden?

Bsp.:

Code: Select all

Kategorie 20 hat *_left '39' und *_right '148' // Oberkategorie

Kategorie 21 hat *_left '40' und *_right '41' // Unterkategorie 1

Kategorie 22 hat *_left '42' und *_right '43' // Unterkategorie 2

......

Kategorie 74 hat *_left '144' und *_right '145' // Unterkategorie 53

Kategorie 75 hat *_left '146' und *_right '147' // Unterkategorie 54
Oder hab ich da einen Denkfehler drin? Ich will nur auf Nummer sicher gehen, Backup hab ich schon gemacht und ich weiß auch was ich tue wenn ich PHP anfasse.

Re: Funktion: cat*_left / cat*_right in Tabelle präfix_categ

Posted: Sun Sep 16, 2007 2:02 pm
by garvinhicking
Hi!

_left und _right sind Item-Referenzen für eine Nested-Set-Datenbankstruktur.

Sie sind die IDs der Kategorie, die in einem aufgeklappten Baum links und rechts neben dem aktuellen liegen. So kann man eine Baumstruktur hierarchisch aufklappen und sequentiell durchwandern.

Google mal nach "Nested Set", da dürftest Du einige Hinweise finden.

Serendipity besitzt eine "Fixup" Routine. Du kannst einfach alle left/right auf 0 setzen, deine kategorien importieren, "parentid" richtig setzen. Danach im s9y interface eine neue kategorie anlegen und direkt wieder löschen, dann korrigiert s9y anhand der "parentids" die _left und _right spalten. Sollte jedenfalls. :)

Grüße,
Garvin

Posted: Sun Sep 16, 2007 2:20 pm
by Big-Tux
Danke Garvin,

da ich nen BackUp habe werd ich das dann gleich mal probieren und danke für den Tipp mit den "Nested Sets" das klingt wirklich interessant, nachdem ich nen Artik dazu bei Google gefunden habe versteh ich jetzt auch die Funktion. :) Erleichtert die Arbeit mit Baumstrukturen aus einer DB enorm.

Grüße
Tobi

Posted: Sun Sep 16, 2007 3:19 pm
by Big-Tux
Als kleine Info für dich Garvin, die "Fixup" Routine funktioniert, hab Kategorien sowie Beiträge in der DB. :wink:

Danke nochmal :D