Seite 1 von 1

Brauch mal Tip zu left-,righ_id (Forum per PHP/SQL anlegen).

Verfasst: 12.05.2008 08:41
von sagm
Hallo,
ich hab eine Routine geschrieben, die mir ein Unterforum anlegt soweit funktioniert das auch schon sehr gut.
Allerdings wurde mir das neue Forum erst angezeigt, nachdem ich

Code: Alles auswählen

		$cache->destroy('sql', FORUMS_TABLE); 
		$auth->acl_clear_prefetch();
angewendet hatte.

Einzig allein die left_id, right_id scheint bei mir nicht zu stimmen.
Ich kann die neuen Foren nur ein mal nach oben bzw. nach unten verschieben. Danach reagiert es im Adminbereich nicht mehr. Dafür rückt mir das parent_id Forum in der Ebene nach link oder nach rechts. (zu sehen unter forum permissions; unter manage forums sieht alles korrekt aus.)

Wie kann ich die left_id, und die right_id unter angabe einer Forum parent_id korrekt ermitteln?

Weiss jemand rat?
Ich dachte ich hätte das Sytem verstanden. Aber jetzt hab ich bischen angst mir die DB zu zerschiessen. :o

:) Viele Grüße.

Re: Brauch mal Tip zu left-,righ_id (Forum per PHP/SQL anleg

Verfasst: 12.05.2008 10:22
von nickvergessen
sagm hat geschrieben:Aber jetzt hab ich bischen angst mir die DB zu zerschiessen. :o
Hast du vermutlich schon.
left_id und right_id lassen sich nicht aus der parent_id ermitteln.
Beim Anlegen eines neuen Forums, wird die right_id des übergeordneten Forums benötigt (parent_id ist die Forenid des übergeordneten).

Nun musst du dir eine Lücke in der ID-Kette schaffen, also alle left_ids ab der parent_right_id und alle right_ids einshcließlich der parent_right_id um 2 erhöhen.um 2 erhöhen

Code: Alles auswählen

			$sql = 'UPDATE ' . FORUMS_TABLE . "
				SET left_id = left_id + 2, forum_parents = ''
				WHERE left_id > " . $parent_data['right_id'];
			$db->sql_query($sql);
			$sql = 'UPDATE ' . FORUMS_TABLE . "
				SET right_id = right_id + 2, forum_parents = ''
				WHERE right_id > " . ($parent_data['right_id'] - 1);
			$db->sql_query($sql);
Erst dann solltest du dein neues Forum einfügen (INSERT INTO), wobei left_id die alte parent_right_id ist und die right_id des neuen Forums die left_id des gleichen Forums + 1 ist.

Re: Brauch mal Tip zu left-,righ_id (Forum per PHP/SQL anleg

Verfasst: 12.05.2008 10:35
von sagm
Danke für die genaue Beschreibung.
nickvergessen hat geschrieben:Hast du vermutlich schon.

:o hab die Foren danach immer wieder gelöscht.

Gibts ein SQL der der mir die right_id und left_id reorganisiert? :cry:

Re: Brauch mal Tip zu left-,righ_id (Forum per PHP/SQL anleg

Verfasst: 12.05.2008 10:56
von sagm
sagm hat geschrieben:Danke für die genaue Beschreibung.
nickvergessen hat geschrieben:Hast du vermutlich schon.

:o hab die Foren danach immer wieder gelöscht.

Gibts ein SQL der der mir die right_id und left_id reorganisiert? :cry:
Erst dann solltest du dein neues Forum einfügen (INSERT INTO), wobei left_id die alte parent_right_id ist und die right_id des neuen Forums die left_id des gleichen Forums + 1 ist.
Also
left_id = Alte parent_right_id
right_id = Alte parent_left_id + 1 ?

Re: Brauch mal Tip zu left-,righ_id (Forum per PHP/SQL anleg

Verfasst: 12.05.2008 11:06
von nickvergessen
sagm hat geschrieben:Gibts ein SQL der der mir die right_id und left_id reorganisiert? :cry:
nicht das ich wüsste.
Aber du kannst ja mal gucken, ob du eine kette aus den left und right_ids basteln kannst.
sagm hat geschrieben:left_id = Alte parent_right_id
right_id = Alte parent_left_id + 1 ?
Ja

(nächstes mal edit-Button benutzen)

Verfasst: 12.05.2008 12:41
von sagm
Hast recht! Denke ich habs kaputt gemacht. Kann auch regulär angelegte Foren nicht mehr im Admin Bereich verschieben.

Hab jetzt ne Stunde lang raufgeglotzt aber ich kapier die Funktion von right_id nicht :-? .
Auf Basis der parent_id müsste doch ein ID zur Sortierung der Foren ausreichen.

Naja, hab mal einen SQL entworfen, der neue IDs ermitteln soll. Kann mir nur nicht vorstellen, das es so einfach ist? :lol:
Aber unmöglich kann es ja nicht sein. die Sortierung meiner Foren stimmt, wenn ich ORDER BY left_id, right_id sage.

Code: Alles auswählen

SELECT `forum_id` , `parent_id` ,  `left_id` , `right_id` , `forum_name` , @row1 := @row1 +2NEW_LEFT_ID, @row2 := @row2 +2NEW_RIGHT_ID
FROM (

SELECT @row1 := -1
)r, (

SELECT @row2 :=0
)r2, `phpbb_forums`
ORDER BY left_id, right_id
Is es nicht! Habs grad getestet.

Wie ist das gemeint ? EDIT BUTTON? Schreibt man hier nur in einem Post?

Verfasst: 12.05.2008 15:34
von Boecki91
sagm hat geschrieben:Wie ist das gemeint ? EDIT BUTTON? Schreibt man hier nur in einem Post?
Wenn darauf kein folge Beitrag von jemand anderem geschrieben wurde, ja.

Einige Artikel die dir eventuell etwas Klarheit über Nested Sets geben könnten:

http://de.wikipedia.org/wiki/Nested_Sets
http://www.klempert.de/nested_sets/artikel/

Ganz einfach zu verstehen ist es nicht :wink: