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

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
Big-Tux
Regular
Posts: 27
Joined: Sat Sep 08, 2007 9:46 am
Location: /var/log/apache2

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

Post 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.
MfG
Tobi
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

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

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Big-Tux
Regular
Posts: 27
Joined: Sat Sep 08, 2007 9:46 am
Location: /var/log/apache2

Post 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
Big-Tux
Regular
Posts: 27
Joined: Sat Sep 08, 2007 9:46 am
Location: /var/log/apache2

Post 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
MfG
Tobi
Post Reply