Hallo,
ich habe eine mySQL-Tabelle ("benutzer") in denen registrierte Benutzer meiner Webseite stehen:
Tabelle "benutzer":
- id + name +
+-----+----------+
+ 1 + olaf +
+ 2 + ute +
+ 4 + hans +
Der Benutzer kann nun Optionen auswählen, die in einer weiteren Tabelle gespeichert werden.
Tabelle "optionen":
- id + option +
+-----+----------+
+ 1 + 1 +
+ 2 + 0 +
+ 4 + 1 +
Diese Tabellen sind soweit von meinem CMS vorgegeben und diese Tabellen sollen unangetastet bleiben.
Ich möchte nun in einer weiteren Tabelle die Namen (benutzer.name) alle Benutzer eintragen, welche als option (optionen.option) eine 1 (true) eingetragen haben. Hintergrund ist, dass dort Statistikdaten der Benutzer eingetragen werden sollen, die diese Option angehakt (option = 1) haben.
Den select-Befehl kriege ich soweit hin:
"SELECT benutzer.name FROM benutzer INNER JOIN optionen ON (benutzer.id = optionen.id) WHERE (optionen.option = 1)"
Die dritte Tabelle ist derzeit wie folgt aufgebaut:
Tabelle "statistik":
- name + statistik +
+-------+------------+ - olaf + 20 +
- hans + 30 +
Als eindeutige ID soll hier der Name verwendet werden, da dieser auch der Schlüssel für die Abfrage der Statistikwerte aus einer externen API ist. Grundsätzlich kann ich bei _dieser_ Tabelle aber auch Änderungen an der Struktur vornehmen, da diese unabhängig vom CMS ist und ausschließlich für die Statistikwerte genutzt wird.
An der Stelle diese Tabelle zu aktualisieren hänge ich nun fest.
Es sollen alle Benutzer, die nicht bereits vorhanden sind (Schlüssel = name) und welche die v.g. Bedingungen erfüllen in "statistik" eingefügt werden. Datensätze bereits vorhandener Benutzer sollen unangetastet bleiben. Es soll auch kein weiterer Datensatz zu diesen Nutzern eingefügt werden (1 Datensatz je Nutzer). Benutzer die in der Tabelle "statistik" vorhanden sind, aber nicht mehr über den v.g. SELECT-Befehl geliefert werden, sollen gelöscht werden.
Jetzt frage ich mich, ob ich dies mit einem Befehl umsetzen kann:
INSERT/REPLACE/UPDATE = fällt m.E. weg, weil keine Löschung der Nutzer die Option nicht mehr gewählt haben oder nicht mehr in der Benutzertabelle vorhanden sind
DELETE = macht m.E. nur i.V.m. einem weiteren Befehl Sinn. D.h. im Anschluss an INSERT/REPLACE/UPDATE die überflüssigen Datensätze löschen.
Gibt es einen SQL-Befehl, der gelieferte Datensätze aktualisiert und gleichzeitig nicht gelieferte DS löscht? Wenn nein, ist dann die Kombination INSERT/DELETE die richtige? Ist mein Ansatz überhaupt der Richtige? Wie würdet ihr die Sache angehen?
Gruß
Alex