Ich möchte wissen ob es (wie in Access) möglich ist, zwei Tabellen miteinander so zu verknüpfen, dass sobald in Tabelle2 eine ID via auto inc gesetzt wurden ist diese automatisch in Tabelle1 übernommen wird.
Habe das Problem das ich einen Datensatz erstelle (Tabelle2) und dieser eindeutig auf einen User (Tabelle1) zugewiesen werden soll.
(Vorweg: ich fülle die Tabellen via PHP INSERT Befehl)
Ich gehe mal davon aus, dass ich Tabelle1 ausgelesen habe (UserName, UserID..) und jetzt einen dynamischen Post in Tabelle2 erstelle wo die Tabelle2_ID durch auto_inc automatisch gesetzt wird. So wie bekomm ich jetzt diese ID heraus um Sie dann in Tabelle1 zu übertragen?
Daher meine Frage ob es so eine Art n:n Verbindung in MySQL gibt das die beiden Tabelle1.ID und Tabelle2.ID als ein Wert fungieren.
Oder wie würdet Ihr das Lösen?
Achja bitte keine Fragen warum ich erst Tabelle2 ausfülle. Meine Tabellen sind um einiges komplexer als das Beispiel hier und es gibt halt diese dynamische Tabelle welche erst nach der Erstellung mit dem user verknüpft werden muss.
Ich hoffe ich konnte es einigermassen gut erklären.
Würde mich sehr über Ideen oder gar Lösungen freuen.
Wenn du die UserId aus Tabelle 1 hast, dann setz diese doch einfach beim neu erstellten Datensatz in ein entsprechendes Feld ein.
Ist das mal geschehen, kannst du mit LEFT JOIN alle Datensätze aus Tabelle 2 auslesen und mit der ID-Verknüpfung auch gleich die zugehörigen Werte aus Tabelle 1.
Dies funktioniert für eine 1-n Verknüpfung (also ein User hat beliebig viele Datensätze in Tabelle 2, aber jeder Datensatz aus Tabelle 2 hat genau einen User). Für n-n-Verknüpfungen (z.B. User/Gruppen: jeder User kann mehrere Gruppen haben und jede Gruppe kann mehrere User haben) benötigst du ja eine Zwischentabelle (ergibt dann 1-n-1), aber das Prinzip ist dann sinngemäss...
das ist ja genau das Problem. Diese Möglichkeit verwende ich ja schon bei einer anderen Tabelle. Aber wie schon beschrieben wird die ID in Tabelle2 automatisch generiert via auto inc (was auch so bleiben muss da dieser Datensatz variable an jeden anderen User übergeben werden kann (ich weiss das wäre auch mit der genannten Methode möglich wenn die Tabelle2.ID einfach immer die momentander User.ID bekommt))
Mir wäre es schon wichtig wenn man gleich die auto inc ID von Tabelle2 irgendwie in Tabelle1 bekommt. Es gibt hier geteilte Meinungen. Eine Partei sagt das ist mir MySQL möglich und die andere sagt es muss einen Weg geben. Und deswegen bin ich jetzt hier bei Euch Fachleuten ;)
Freue mich wie immer auf Antwort ;)
PS: im schlimmsten Fall muss ich in Tabelle2 einfach eine auto inc ID und eine ZuordnungsID erstellen aber noch gebe ich nicht auf ;)
Ja logisch hast du auch in Tabelle 2 eine ID, die jeden Datensatz eindeutig referenzieren lässt. Aber zusätzlich musst du halt ein Feld anlegen, das z.B. 'user_Id' heisst, in welches du dann die entsprechende Id des Benutzers speicherst.
wie gesagt ich kann das Problem ohne weiteres Lösen aber es geht halt darum ob es möglich ist zwei Tabellen so zu verbinden das nur eine eingabe/übergabe nötig ist. Wie schon geschrieben Beispiel Access DB. (Ja ich weiss Access ist keine Datenbank ;)
wenn ich Dich richtig verstehe, hast Du in Tabelle 1 Benutzer und in Tabelle 2 irgendwas anderes. Jeder Bneutzer bekommt genau eine Zuordnung zu einem dieser Einträge aus Tabelle2 wobei auch mehrere Benutzer mit dem selben Eintrag aus Tabelle2 verbunden werden können?
In diesem Fall würde ich mit lastinsertid die zuletzt generierte ID auslesen und dann in Tabelle1 übertragen.
ja eine sehr geile Idee welche ich auch just@thismoment gefunden hatte. Bin mir aber gerade am Kopf zerbrechen zu wieviel % (Beispiel) zwei User zur fast selben Zeit einen Eintrag in der Tabelle2 machen und somit möglicherweise der erste User die selbe ID vom zweiten User bekommt. Sprich um es mal Reihenfolgetechnisch aufzuzählen.
User1 -> erstellt einen Eintrag (automatische Backgroundroutine) und in diesem Moment erstellt auch ein zweiter User einen Eintrag bevor User1 die ID via "mysql_insert_id()" bekommen hat.
Dann müsste User1 und User2 die selbe ID bekommen. Und das wäre Fatal.
Und um noch einen Schritt weiter zu gehen. Ich habe das Datenbank Beispiel hier sehr sehr vereinfacht. Es handelt sich in wirklichkeit um verknüpfte Tabellen über 4 Ebenen. Beispiel:
Ja, für dich mag das gut sein. Zum Helfen ist's schwieriger.
vielleicht würde es helfen, wenn du uns mal erklärst, was du eigentlich genau programmierst. Gibt das ein User-Forum oder so? Du hast immer noch nicht klargemacht, ob es jetzt für jeden Tabellen2-Datensatz genau ein User gibt oder umgekehrt.
Oh ich dachte ich hätte das erwähnt. Dieser Text darf nur bei einem User liegen.
Ich beziehe mich einmal auf das zweite Beispiel. Ein User klickt zum Beispiel auf Text Random erstellen. Dadurch wird ein Zufallstext erzeugt welche DANN auf den User gelegt wird welcher geklickt hat. Sprich die [Texte.ID] (auto inc) wird dann bei demjenigen User ins Profil eingetragen.
Das Problem hierbei ist wirklich das ZUERST der Text erstellt wird und via auto inc eine ID bekommt. Und dann diese ID ausgelesen oder eben an den User übergeben werden muss.
So ich hoffe jetzt habe ich das komplette Bild beschreiben können. Es aber wie gesagt ein theoretisches / abgeleitetes Beispiel basiert aber auf dem richtigen Projekt. Ich habe hier einfach mal ein Forum oder Post Beispiel genannt.
Jeder User hat also mehrere Texte, aber jeder Text kann genau einem User zugeordnet werden. Warum willst du dann die Text-Ids in der User-Tabelle speichern? Das könnten ja beliebig viele sein. Speichere vielmehr die User-Id in der Text-Tabelle. Diese Zuordnung ist ein-eindeutig. Wenn doch der User einen neuen Text erstellt, kennst du die User-Id bereits. Du kannst in der Text-Tabelle einen neuen Datensatz erstellen (der kriegt ne auto-Id, die niemanden interessiert) und die USER-id speicherst du in ein entsprechendes Feld. Somit weiss jeder Text, zu welchem User er gehört. Willst du einen User mit all seinen Texten abfragen, fragst du die Text-Tabelle ab und machst einen JOIN zur Usertabelle, um auch die Userdaten zu erhalten.
ich habe bei dem problem hin un her überlegt und habe mich dann für folgende Lösung entschieden:
Problembeschreibung (Datensatz wird erstellt und und besitzt eine autoinc ID die nach dem Erstellen in eine andere Tabelle übergeben werden muss)
Lösung: Ich erstelle den Datensatz und lese gleich danach die ID mit "$insert_id=mysql_insert_id();" aus und Trage diese in die andere Tebelle.
Als Schutz habe ich noch die User_ID (die bekannt war/ist) in den neu erstellten Datensatz eingefügt. So kann ich jetzt einen zusätzlich Vergleich durchführen.
Ja es klingt wieder leicht confused aber lässt sich kaum einfacher erklären.
Gruss und Happy Prog
PS: Noch ne kleine Frage. Diesmal ne leichte ;)
Ich will via (DELETE FROM Table WHERE ID='2' AND ID='1') diese beiden Datensätze löschen. Aber er macht's einfach nicht. Selbst direkt in MySQL bringt er keinen Fehler, löscht aber auch keine der beiden Datensätze. Vielleicht hat das ja schon jemand mal gemacht.
Bevor die Fragen kommen-> Ja die IDs sind überprüft und einzeln kann ich diese löschen. Aber ich möchte gern eine Gesamtroutine.
(Dieser Beitrag wurde von LMDDRAGON am 29. Jan 2009, 12:31 geändert)
danke geht wunderbar. Und Du mit Deinen Triggern andauernd ;)
Die klingen sehr gut und funktional aber leider stehen die noch auf meiner ToDo Liste. Wenn Du Zeit und Lust hast würde ich Dich mal im ICQ anschreiben und Du kannst mir die Sache vielleicht schneller bebringen als ich es hier im Netz selbst tun kann.
Interessieren tut mich hier eigentlich nur die genaue Funktionsweise (die mir zu 60% schon klar ist) und die PHP bzw. MySQL Anbindung und Durchführung.
Kannst auch gern hier einen Post schreiben und die Sachen kurz aufzählen. Aber natürlich nur wenn Du magst.
Gruss und danke Dir (und natürlich auch alle anderen die hier aktive und passive dabei sind)