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

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
sagm
Mitglied
Beiträge: 12
Registriert: 10.05.2008 17:50
Kontaktdaten:

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

Beitrag 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.
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

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

Beitrag 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.
kein Support per PN
sagm
Mitglied
Beiträge: 12
Registriert: 10.05.2008 17:50
Kontaktdaten:

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

Beitrag 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:
sagm
Mitglied
Beiträge: 12
Registriert: 10.05.2008 17:50
Kontaktdaten:

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

Beitrag 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 ?
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

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

Beitrag 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)
kein Support per PN
sagm
Mitglied
Beiträge: 12
Registriert: 10.05.2008 17:50
Kontaktdaten:

Beitrag 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?
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag 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:
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“