Mike: Replace von Datensätzen

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?

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

    --
    T'Pol: I apologize if I acted inappropriately.
    V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
    (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
    Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
    1. 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

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

        --
        Signatur oder nicht Signatur - das ist hier die Frage!
        1. 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

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

            --
            Signatur oder nicht Signatur - das ist hier die Frage!
  2. Tabelle A: ID | KATEGORIE | POSTEN | DATE | BETRAG | TEILER |
    Tabelle B: 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.

    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?