Hello,
Mein Problem ist aber, wenn ich dieses Vorhaben umsetzte, ich weiß nicht wie ich die Datensätze Bearbeiten kann. Sprich ein User geht in sein Profil bearbeitet seine Sprachen, klickt auf speichern, was passiert dann? Lösche ich erst ALLE Datensätze von diesem User und schreibe alle neu, was wohl die einfachste Möglichkeit ist oder prüfe ich, welcher Datensatz neu bzw. weg gefallen sind?
Du hast drei Tabellen:
User User_Sprache Sprache
---- ------------ -------
ID ID_USER ID
UPDATE_COUNT ID_SPRACHE UPDATE_COUNT
... UPDATE_COUNT ...
ON_OFF
Die Tabelle User_Sprache _kann eine eigene ID haben, muss sie aber nicht mehr, da Du ohnehin einen Unique Index über die Spalten ID_USER + ID_SPRACHE legen wirst, der Datensatz damit also eineindeutig (sic) identifiziert werden kann.
Wenn Du nun die Userdaten zur Bearbeitung (Anzeige) aufbereitest, dann holst Du dir die Daten aus der Tabelle User, holst Dir die die zugehörigen Daten aus der Tabelle User_Sprache und _alle_ Datensätze aus der Tabelle Sprache.
Die beiden Ergebnisse aus Sprache und User_Sprache musst Du noch gegeneinander abgleichen. Angezeigt werden alle Sprachen, aber nur diejenigen, für die es auch einen Datensatz und damit einen Wert für ON_OFF gibt, wurden bisher vom User bearbeitet, gewählt oder abgewählt. Alle Datensätze aus Sprache, die in User_Sprache keinen Partner finden, sind seit der letzten Bearbeitung durch den User hinzu gekommen.
Man kann die Teilergebnisse des (HTML-)Formulares, das Du erfinden musst, nun mittels Joins schon von der Datenbank vorbereiten lassen, oder aber diese Aufgabe in PHP erledigen.
Du musst Die jedenfalls einen Formulartyp bastelen, der
+--------------------------------------+
| User-Stammdaten |
| |
| |
|+------------------------------------+|
|| Details ||
|+------------------------------------+|
|| Details ||
|+------------------------------------+|
|| ... ||
|+------------------------------------+|
+--------------------------------------+
in etwa so aussieht.
Nun ist es Philosphie, ob Du bei Änderungen:
* jeweils das gesamte Formular bestätigst
* Stammdaten und Detaildaten separat aber im Block bestätigst
* Detaildaten einzeln bestätigst
Wie komplex Du das machen willst, hängt von deiner Entwicklungspower ab.
Für den Anfang würde ich immer jede Änderung einzeln vornehmen.
Wenn im Detailbereich nun plötzlich Sprachen auftauchen, zu denen der User sich npch nicht geäußert hat, muss Du das auch irgendwie kenntlich machen und auch überlegen, ob er sich um die Entscheidung drücken darf, oder ON oder OFF wählen muss. Wenn er sich drücken darf, musst Du noch entscheiden, ob trotzdem ein Datensatz in User_Sprache angelegt werden soll (mit ON_OFF = NULL) oder ob du das gar nicht registrieren willst, dass der User sich gedrückt hat.
Du siehst: erstmal kommt die Philosophie, dann die Planung, dann die Programmierung.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg