Doppelte Datensätze in MySQL
-
Hallo,
ich schreibe gerade eine C++ Anwendung, in welcher ich eine MySQL Datenbank benutze. Da habe ich nun eine kleine Frage zu MySQL.
Ich habe eine Tabelle nach dem Format:
ID | Name | Betrag | Textschluessel | VW | Datum
Wie es sich vielleicht erahnen lässt, möchte ich Kontoumsätze in einer DB verwalten. Diese möchte ich immer bei Bedarf aus einer Datei exportieren.
Problem ist, dass ich keine doppelten Datensätze haben möchte. Mit UNIQUE kann ich meines Wissens immer nur eine Spalte angeben, dass diese nicht doppelt sein kann. Geht dies leider nicht. Ein Eintrag ist nur doppelt, wenn eine ganze Zeile mit allen Spalten sich ein zweites mal vorfindet.
Gibt es dennoch etwas ähnliches wie UNIQUE, was sich auf die ganze Zeile bezieht, oder gibt es eine andere Möglichkeit mit SQL?
Ich wäre für jede Info sehr dankbar. Antworten können auch mit PHP beantwortet werden, dass stellt kein Problem dar.
Grüße Philipp
-
Bei UNIQUE würdest du ja schon das Speichern verhindern! Was willst du denn genau - einfügen doppelter Einträge unterbinden, oder bei der Ausgabe eben nur nicht doppelt anzeigen?
-
Hi,
ich gebe mal ein Beispiel. Sagen wir ich habe folgende Datenbank:
id | name | betrag | verwendungszweck | Datum
Folgende Einträge sind schon in der Tabelle:
0 | Hannes | 12.49 | Überweisung Nr. 23 | 12.12.2003
0 | Michi | 22.54 | Ebay 23 | 12.12.2003
0 | Andreas | 34.16 | Überweisung von gestern | 12.12.2003
0 | Paul | 2.66 | Danke | 12.12.2003Nun habe ich eine Liste mit neu einzufügenden Einträgen. Einfügen möchte ich gerne:
Andreas | 34.16 | Überweisung von gestern | 12.12.2003
Paul | 2.66 | Danke | 13.12.2003Die erste Zeile darf nicht eingefügt werden, da dieser Datensatz bereits existiert. Die zweite zeile darf eingefügt werden, weil es sich um ein anderes Datum handelt.
Komplett gleiche Einträge dürfen nicht eingefügt werden, alles andere, wo eine kleine Änderung ist, darf eingefügt werden.
Dies hier meine Idee.
Alle aktuellen Daten aus der DB lesen und in ein Array speichern. Bevor ich nun jeden neuen Eintrag in die DB spiele, prüfe ich, ob der Datensatz bereits im Array vorhanden ist. Wenn ja, dann mache ich nichts, andernfalls füge ich den Datensatz hinzu.
Ich hoffe es war verständlich.
Philipp
-
Wenn mich nicht alles täuscht kann man doch für UNIQUE mehrere Spalten angeben - oder wird das dann auf jede Spalte einzeln angewandt?
-
Hi,
das frag ich mich ja auch. meines wissens wird es einzeln angewandt, so dass ich dann z.b. nur zahlungen von einer person einmalig haben könne und das will ich ja nicht,
philipp
-
Deines Wissens nach ist es falsch.
UNIQUE KEY `myfields ` (`name `,`betrag `,`verwendungszweck `,`Datum `)
Funktioniert einwandtfrei.
Was ich nicht verstehe.
Warum versuchts du es nicht mal.
-
Hi,
wie kann ich das denn noch nachträglich einbauen, wenn ich unique im phpmyadmin immer anklicke kommt immer ne meldung nach dem motto, dass die spalte bereits mehrere einträge mit dem selben wert hat.
phili
-
Du musst einmal auf Unique klicken und dann unten bei Indizes auf "bearbeiten". Dort kannst du dann weitere Spalten zum Index hinzufügen!
Oder du machst das ganze direkt in SQL mit ALTER TABLE