Replace von Datensätzen
Mike
- datenbank
0 Michael Schröpl0 Mike
0 srob
Hallo,
Habe eine Tabelle A , die sieht folgend aus:
ID | KATEGORIE | POSTEN | DATE | BETRAG | TEILER |
sowie eine Tabelle B, die folgendermaßen aussieht:
ID | REFID | KATEGORIE | POSTEN | DATE | BETRAG
DIe Tabellen liegen auch in unterschiedlichen Datenbanken auf unterschiedlichen Servern. Ich möchte nun alle Daten aus Tabelle A abgreifen mit einem bestimmten Datum und diese in Tabelle B speichern. Wenn jedoch die ID in Tabelle A bei der REFID in Tabelle B bereits existiert und die KATEGORIE in beiden die gleiche ist, dann soll der Eintrag in Tabelle B überschrieben werden.
Irgendjemand ne Idee, wie das zu lösen ist?
Hi Mike,
DIe Tabellen liegen auch in unterschiedlichen Datenbanken auf unterschiedlichen Servern.
warum? Und was heißt hier "auch"?
Irgendjemand ne Idee, wie das zu lösen ist?
Auf welchem (der beiden?) Rechner soll diese Lösung statt finden?
Welche Kommunikationsverbindung kannst Du zu den übrigen Datenbankservern aufbauen, um an die jeweils fehlenden Daten zu gelangen?
Viele Grüße
Michael
Das Ganze liegt auf der Server wo die Tabelle B ist. Ich habe auf beide Maschinen volle root Rechte. Jedoch wäre mir eine simple PHP/MySQL Lösung am liebsten.
Mike
Moin!
Das Ganze liegt auf der Server wo die Tabelle B ist. Ich habe auf beide Maschinen volle root Rechte. Jedoch wäre mir eine simple PHP/MySQL Lösung am liebsten.
Es gibt den MySQL-Befehl "REPLACE". Näheres siehe in der Doku: http://www.mysql.com
- Sven Rautenberg
Servus,
glaube nicht, dass das so einfach ist...
MySQL:
REPLACE funktioniert genau wie INSERT, ausser dass der alte Datensatz gelöscht wird, bevor ein neuer eingefügt wird, wenn ein alter Datensatz in der Tabelle denselben Wert wie der neue auf einem eindeutigen Index hat.
Leider ist das in Tabelle B "refid" weder ein Primärschlüssel noch Unique!
Wie soll das gehen?
Mike
Moin!
Leider ist das in Tabelle B "refid" weder ein Primärschlüssel noch Unique!
Wie soll das gehen?
Dann gehts nicht, und du mußt dir einen anderen Mechanismus ausdenken. Sorry, so genau hatte ich dein Problem dann doch nicht betrachtet.
- Sven Rautenberg
Tabelle A: ID | KATEGORIE | POSTEN | DATE | BETRAG | TEILER |
Tabelle B: ID | REFID | KATEGORIE | POSTEN | DATE | BETRAGDIe Tabellen liegen auch in unterschiedlichen Datenbanken auf unterschiedlichen Servern. Ich möchte nun alle Daten aus Tabelle A abgreifen mit einem bestimmten Datum und diese in Tabelle B speichern. Wenn jedoch die ID in Tabelle A bei der REFID in Tabelle B bereits existiert und die KATEGORIE in beiden die gleiche ist, dann soll der Eintrag in Tabelle B überschrieben werden.
Moin Mike,
man könnte so vorgehen:
1. SELECT blah FROM tableA WHERE DATE blah
2. In PHP durch die Ergebnismenge iterierend:
UPDATE tableB SET blah WHERE (REFID=tableA_ID) AND (KATEGORIE=tableA_KATEGORIE)
wenn mysql_affected_rows() == 0: INSERT INTO tableB blah
Oder was ist genau Dein Problem?
HTH Robert
P.S. Wie fast immer bei derartigen Gelegenheiten frage ich mich, was treibt einen DB-Entwickler dazu, reservierte Bezeichner als Spaltennamen einzusetzen (hier den Datentyp DATE)? Ignoranz, Stupor, Bildungsmangel? Oder ist das einfach nur ein Indiz für schlechtes Handwerk?