# Foren-Netzwerk erstellen



## Ayu_Epokh (10. November 2012)

Hallo und ein schönes Wochenende zusammen 

Ich habe vor, mir ein Forennetzwerk für meinen Clan zu erstellen.
Zum Einsatz kommt WoltLab® - Produkte - Burning Board® Lite - Übersicht.
Die Installation der Foren, Konfiguration ist nicht das Problem, im Gegenteil.

Viel wichtiger ist für mich die Frage:

Kann ich verschiedene Foren gleichzeitig auf eine einzige Datenbanktabelle zugreifen lassen?
Der Sinn dahinter ist, dass jeder User sich nur einmal registrieren muss und dann auch seine Beiträge von allen Foren zusammengezählt werden.

Meine Konfiguration auf meinem Server besteht wie folgt:
Apache/2.2.22 (Win32) PHP/5.3.15
Datenbank-Client Version: libmysql - mysqlnd 5.0.8
PHP Erweiterung: mysqli

Um auf meine Datenbank zuzugreifen nutze ich PHPmyadmin.

Ich hoffe mir kann jemand helfen 
Möchte das unbedingt machen und weiß noch nicht genau wie.
Habe mir aber mal eine solche Usertabelle rausgepickt;



			Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.
        



Prinzipiell denke ich, dass ich die SQL Anweisung "select from" verändern müsste, damit das Forum sich das woanders raussucht.

Auf jeden Fall mache ich erstmal ein Backup bevor ich irgendwas anfasse 

Danke schonmal für eure Zeit, die ihr mir hier schenkt / opfert 

Ayu


----------



## DarkMo (10. November 2012)

prinzipiell is das sicher möglich - musste halt nur "bissl" im code rumpfuschen ^^ nen globaler account is da noch das einfachere, denk ich mal - da brauchste nur von jedem forum den loginkrams auf ein un die selbe user-tabelle umzulegen (und ggf unterschiede anpassen). also bsp:

forum1 schreibt in tabelle forum1_users die ganzen daten (name, pw, email) und forum2 dann halt in forum2_users (name, pw, mail, anmeldedatum). lenkst du dann halt den ganzen kram vom forum2 aufs 1er um (muss es ja nen sql-string im code geben) und die tabelle vom 1er noch ums anmeldedatum erweitern (oder halt das nich mitspeichern). is halt gebastel, aber möglich. die crux an der sache is halt, alle sql strings zu erwischen ^^ un bei den forenposts sollte es das selbe sein (wird sicher auch bei den user-infos mitgespeichert). hmm, das schlimmste wirds sein, wenn die die spalten-namen der tabellen immer anders genannt haben ^^ dann kannste den ganzen code durchsuchen und die sql-strings anpassen 

also: möglich isses sicherlich, aber wird wohl in ne sisyphusarbeit ausarten  fragt sich nur: wieso überhaupt? mach doch statt verschiedener foren einfach in einem forum verschiedene unterbereiche. notfalls schreibste dir halt selber was


----------



## Ayu_Epokh (11. November 2012)

Danke erstmal ^^

Zu deiner Frage nach dem wieso:

Mir persönlich gefällt es besser, für jeden Bereich eine eigene Struktur und ein eigenes Design zu nehmen, deswegen möchte ich mehrere Foren miteinander "verbinden".
Ich finde auch, dass es so viel übersichtlicher ist und nicht so dolle ausartet, wenn man irgendetwas sucht oder Antworten in einem bestimmten Bereich haben mag 

Kann aber auch nur ne Macke oder so von mir sein


----------



## JimSim (11. November 2012)

Hm, ich würde die login-abfragen auf eine andere Tabelle umleiten. In der Tabelle werden dann die Einträge aus den anderen Foren-Logins kombiniert. Bei der Registrierung musst du dann natürlich den Namen auch gegen diese Tabelle checken lassen... Aber ich glaube das wäre die einfachste Lösung, wo du nicht so viel machen musst...

Was die Anzahl an Posts betrifft... Am besten da die Abfrage auch auf eine gesonderte Tabelle umschreiben wo dann die Anzahl der einzelnen Posts aus den unterschiedlichen Foren zusammengezählt werden.


----------



## Ayu_Epokh (11. November 2012)

Gute Idee, JimSim.
Ich werde das mal so versuchen


----------



## DarkMo (11. November 2012)

hab ich nich genau das gesagt? xD


----------



## JimSim (11. November 2012)

DarkMo schrieb:


> hab ich nich genau das gesagt? xD



Ne, du wolltest alle in eine Tabelle schreiben.  Ich wollte dafür ne eigene Tabelle, wobei die anderen weiterhin existieren... Wenn ich mir das jetzt so überlege kann das aber auch Probleme machen, je nach dem, wie das Forum funktioniert. Ob es z.B. bei Posts auch jedesmal überprüft ob der Author in der eigenen Tabelle existiert etc. Für Logins wäre also nen merge sinnvoll. Den Abgleich sollte man aber auch mit nem Event/Trigger hinkriegen. Also wenn  in "Forum1.foren_user" was neues eingetragen wird, oder geupdated wird trage das ebenfalls bei "Forum2.foren_user" ein.

Bei Posts ist es aber ne doofe Idee die Tabellen zusammenzuführen. Die müssen weiter getrennt betrachtet werden, sonst passieren komische Sachen. Da also lieber ne eigene Tabelle machen, die den counter aller Foren beinhaltet und von dort dann die Anzahl an Posts auslesen...

Irgendwie sowas.


----------



## Ayu_Epokh (12. November 2012)

Ja, irgendwie sowas 

So denk ich mir das im Moment auch noch, werd mich weiterhin mit auseinandersetzen ^^

Danke euch jedenfalls für eure Gedanken / Ansätze / Hilfestellungen


----------



## kühlprofi (12. November 2012)

Wieviele Mitglieder erwartest du denn? Ein Forum sollte doch genügen, wenn du es übersichtlich konfigurierst ^^.
Sind denn wenigstens deine Foren alle vom selben Typ (Woltlab?)


----------



## Ayu_Epokh (12. November 2012)

Ja, es sind alle vom gleichen Typ.
Jedes Forum wird WBBLite 2.1.1 sein.

Eine genaue Mitgliederanzahl ist noch nicht abzuschätzen, aber ich gehe davon aus, dass es sich lohnen wird.
Übersichtlichkeit ist hier so eine Sache. Es soll ja eine Art "Foren-Netzwerk" werden / sein.
Naja ich muss einfach sehen wie und ob das mit meinen momentanen Mitteln und Möglichkeiten machbar bzw. realisierbar ist... und ob meine SQL Kentnisse dafür ausreichen.


----------



## DarkMo (12. November 2012)

najo, wenn se alle vom selben typ sin, gehts doch recht easy. einfach halt dann den tabellen namen für alles user relevante (postings, login, name... was weis ich ^^) ändern, die spalten usw sind dann ja immer gleich.


----------



## kühlprofi (12. November 2012)

DarkMo schrieb:


> najo, wenn se alle vom selben typ sin, gehts doch recht easy. einfach halt dann den tabellen namen für alles user relevante (postings, login, name... was weis ich ^^) ändern, die spalten usw sind dann ja immer gleich.


 
Stimmt schon, aber ob es dann wirklich so easy ist. Naja, mach halt mal ein ERM dann findest du es heraus was SQL technisch alles nötig ist damit das sauber läuft. Einfacher bzw. gescheiter wäre es wohl einfach gewisse Tabellen zu synchronisieren womit du ggf. sogar eine gewisse Redundanz erreichen würdest.


----------



## DarkMo (12. November 2012)

ich meinte im vergleich zu völlig verschiedenen boards mit anderen tabellen layouts. daher ja auch der etwas umfassendere beitrag in der ertsen antwort. da muss man halt gut suchen das man alles erwischt. und bei gleichen boards sind zumindest die vorraussetzungen schonmal weitaus besser ^^


----------



## kühlprofi (12. November 2012)

DarkMo schrieb:


> ich meinte im vergleich zu völlig verschiedenen boards mit anderen tabellen layouts. daher ja auch der etwas umfassendere beitrag in der ertsen antwort. da muss man halt gut suchen das man alles erwischt. und bei gleichen boards sind zumindest die vorraussetzungen schonmal weitaus besser ^^


 
Hehe ja da hast du natürlich Recht . Man müsste schon fast ein ERM zur Hand haben, damit man sieht welche Tabellen miteinander verknüpft sind. Danach sollte es wie du sagst schon einfach sein die diversen Felder von der jeweils richtigen DB abzufragen. Dazu muss im schlechten Fall aber eine Ganze Menge umgebaut werden, je nach dem wie die Abfragen programmiert sind ^^.


----------



## Ayu_Epokh (13. November 2012)

kühlprofi schrieb:


> Man müsste schon fast ein ERM zur Hand haben, damit man sieht welche Tabellen miteinander verknüpft sind.


 
Was genau ist denn ein ERM? Steht das in diesem Fall für:
Electronic Resource Management, einem System zur Verwaltung von Informationen und Workflows, die erforderlich sind, um e-Ressourcen effizient auszuwählen, zu erwerben, zu pflegen, zu erneuern bzw. abzubestellen.

Würde am meisten Sinn machen.


----------



## JimSim (13. November 2012)

Entity-Relationship-Model meint er wahrscheinlich. Damit modelliert man die Beziehung zwischen den unterschiedlichen Tabellen in einer Datenbank. Brauchst du aber nicht, weil du hast die Datenbank ja vor dir liegen... 

Aber mach es dir erstmal nicht so kompliziert... Schreib nen Trigger:

```
CREATE TRIGGER testtrigger AFTER INSERT ON forum1.usertabelle
FOR EACH ROW
BEGIN
INSERT INTO forum2.usertablle (ID, name, passwort)
VALUES(NEW.ID, NEW.name, NEW.passwort)
END
```

Und dann schreibste noch einen für Updates:


```
CREATE TRIGGER testtrigger2 AFTER UPDATE ON forum1.usertablle
FOR EACH ROW
BEGIN
UPDATE TABLE forum2.usertabelle
SET name = new.name,
passwort = new.passwort

WHERE
id = new.id
END
```

Und dann noch das ganze umgekehrt als von forum2 auf 1 und so weiter und so fort...

Und wenn das klappt, kannste anfangen dir um Race-Conditions Gedanken zu machen. 

EDIT: DELETE Trigger natürlich nicht vergessen. 

EDIT2: Achso... Damit kein Loop entsteht, so das Trigger1 von forum1 Trigger2 von forum2 auslöst etc. solltest du da am besten vorher im Trigger ne Select abfrage einbauen, und überprüfen ob, der Wert schon vorhanden ist (bei Insert) oder gleich ist (bei Update) oder schon weg ist(delete) und dann per if abfrage prüfen was da passiert. Danach kannste dann "INSERT INTO" etc. ausführen. Sonst entsteht nen Loop oder es werden Fehler geschmissen... Das wäre nicht gut.


----------



## Ayu_Epokh (14. November 2012)

Danke, JimSim!


----------

