[GastForen Programmierung/Entwicklung PHP und MySQL PHP + MySQL

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

PHP + MySQL

LMDDRAGON
Beiträge gesamt: 11

13. Jan 2009, 12:00
Beitrag # 1 von 16
Bewertung:
(14468 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Leute,

ich habe gerade eine Gehirnblockade.

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.

Gruss
X

PHP + MySQL

swisscheese
Beiträge gesamt: 387

13. Jan 2009, 12:47
Beitrag # 2 von 16
Beitrag ID: #380758
Bewertung:
(14406 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo

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...

Gruss, swisscheese


als Antwort auf: [#380745]

PHP + MySQL

LMDDRAGON
Beiträge gesamt: 11

13. Jan 2009, 13:03
Beitrag # 3 von 16
Beitrag ID: #380760
Bewertung:
(14395 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Meister des Käses (nicht böse gemeint) :)

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 ;)


als Antwort auf: [#380758]

PHP + MySQL

swisscheese
Beiträge gesamt: 387

13. Jan 2009, 13:43
Beitrag # 4 von 16
Beitrag ID: #380768
Bewertung:
(14380 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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.

Alles unklar?


als Antwort auf: [#380760]

PHP + MySQL

LMDDRAGON
Beiträge gesamt: 11

13. Jan 2009, 13:47
Beitrag # 5 von 16
Beitrag ID: #380769
Bewertung:
(14377 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo noch einmal,

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 ;)

Gruss und danke für die Antworten bis jetzt.


als Antwort auf: [#380768]

PHP + MySQL

flobaer
Beiträge gesamt: 317

13. Jan 2009, 14:05
Beitrag # 6 von 16
Beitrag ID: #380774
Bewertung:
(14364 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

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.

Mit nur einer Abfrage wird das nicht gehen.

Viele Grüße
Florian


als Antwort auf: [#380769]

PHP + MySQL

LMDDRAGON
Beiträge gesamt: 11

13. Jan 2009, 14:25
Beitrag # 7 von 16
Beitrag ID: #380776
Bewertung:
(14346 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hiho,

ja eine sehr geile Idee welche ich auch [email protected] 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:

[USER]
-user_id- (auto inc)
-post_id-
-haufen zeugs-

[POST]
-post_id-
-text_id-
-Texte-

(Folgende Text Tabelle wird unabhängig vom User erstellt und wird erst dann zu einem User hinzugefügt)
[Texte]
-text_id- (auto inc)
-Text-

So ich hoffe ich konnte die Sache noch verständlich rüberbringen.

Ich weiss ich bin verwirrt ... und das ist gut so ;)


als Antwort auf: [#380774]

PHP + MySQL

swisscheese
Beiträge gesamt: 387

13. Jan 2009, 14:46
Beitrag # 8 von 16
Beitrag ID: #380781
Bewertung:
(14332 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ LMDDRAGON ] Ich weiss ich bin verwirrt ... und das ist gut so ;)

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.


als Antwort auf: [#380776]

PHP + MySQL

LMDDRAGON
Beiträge gesamt: 11

13. Jan 2009, 15:23
Beitrag # 9 von 16
Beitrag ID: #380793
Bewertung:
(14318 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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.


als Antwort auf: [#380781]

PHP + MySQL

swisscheese
Beiträge gesamt: 387

14. Jan 2009, 08:30
Beitrag # 10 von 16
Beitrag ID: #380861
Bewertung:
(14263 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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.


als Antwort auf: [#380793]

PHP + MySQL

oesi50
  
Beiträge gesamt: 2315

14. Jan 2009, 14:50
Beitrag # 11 von 16
Beitrag ID: #380957
Bewertung:
(14245 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo LMDDRAGON,

hast du es schon mal mit Triggern versucht?

http://office.microsoft.com/.../HP030854151031.aspx

oder

http://dev.mysql.com/.../create-trigger.html


als Antwort auf: [#380745]
(Dieser Beitrag wurde von oesi50 am 14. Jan 2009, 15:11 geändert)

PHP + MySQL

LMDDRAGON
Beiträge gesamt: 11

29. Jan 2009, 12:24
Beitrag # 12 von 16
Beitrag ID: #383159
Bewertung:
(13986 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo da bin ich wieder,

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.


als Antwort auf: [#380957]
(Dieser Beitrag wurde von LMDDRAGON am 29. Jan 2009, 12:31 geändert)

PHP + MySQL

oesi50
  
Beiträge gesamt: 2315

29. Jan 2009, 12:44
Beitrag # 13 von 16
Beitrag ID: #383162
Bewertung:
(13980 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo LMDDRAGON


versuchs mal so:

Code
DELETE FROM Table WHERE ID IN (2,1); 


PS: Trigger gefallen dir wohl nicht?

PPS: nein OR ist hier nicht sinnvoll.


als Antwort auf: [#383159]
(Dieser Beitrag wurde von oesi50 am 29. Jan 2009, 12:46 geändert)

PHP + MySQL

flobaer
Beiträge gesamt: 317

29. Jan 2009, 12:44
Beitrag # 14 von 16
Beitrag ID: #383163
Bewertung:
(13979 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Du willst eine Zeile lösche bei der die ID 1 UND 2 ist. Das wird wohl nicht gehen. Versuch es mal mit OR ;-)

Viele Grüße
Florian


als Antwort auf: [#383159]

PHP + MySQL

LMDDRAGON
Beiträge gesamt: 11

29. Jan 2009, 13:11
Beitrag # 15 von 16
Beitrag ID: #383170
Bewertung:
(13967 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi oesi50,

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)


als Antwort auf: [#383162]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
01.12.2022

Online
Donnerstag, 01. Dez. 2022, 10.00 - 10.45 Uhr

Webinar

Die drei ColorLogic-Programme ZePrA, CoPrA und ColorAnt sind in neuen Versionen mit vielen neuen Funktionen im Jahr 2022 veröffentlich worden oder werden in Kürze veröffentlicht (ColorAnt 9). In unserem ca. 45 minütigen kostenlosen Webinar zeigen wir Ihnen einige dieser neuen Funktionen mit dem Schwerpunkt auf Automatisierung und Produktivitätssteigerungen.

Ja

Organisator: Impressed GmbH

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=311

ColorLogic Update-Webinar ZePrA 10, CoPrA 9 und ColorAnt 9
Veranstaltungen
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/