Page 1 of 1
doppelte Datensätze beim INSERT ignorieren
Posted: 2004-02-17 16:38
by andreasbinder
Hi,
ich habe eine Datenbank mit folgendem Format:
ID(auto_increment)|Name|Anschrift|PLZ|Zusatz
Zum Füllen der Datenbank benutze ich ein PHP Skript, das vorhanden Dateien ausliest, die Daten aufbereitet und dann in die DB schreibt.
Da sich der Inhalt (die Datensätze) der Dateien teilweise überscheiden, kann es sein, dass die selben Daten mehrfach eingefügt werden.
Gibt es eine Möglichkeit zu prüfen, ob ein Datensatz (eindeutig nach Kombination aus Name, Anschrift, PLZ, Zusatz) bereits vorhanden ist und dann der Datensatz nicht wieder eingefügt wird?
Diese sollte möglichst nicht im PHP Skript über ein "SELECT ..." erfolgen.
Vielen Dank.
AndyB
Re: doppelte Datensätze beim INSERT ignorieren
Posted: 2004-02-17 16:48
by cjhbabel
AndreasBinder wrote:ID(auto_increment)|Name|Anschrift|PLZ|Zusatz
Die Daten Name, Anschrift & PLZ um Leerzeichen und andere Satzzeichen bereinigt und alles kleingeschrieben in die MD5 Funktion packen und dann die MD5 für jede Adresse mitspeichern. Das Feld MD5 muss unique sein. Damit erreichst Du, dass jeder Datensatz bei dem Name, Anschrift und PLZ gleich ist nur 1x in der Datenbank ist.
Re: doppelte Datensätze beim INSERT ignorieren
Posted: 2004-02-17 16:57
by andreasbinder
Vielen Dank für Deine Antwort.
Gute Idee!
Gibt es noch eine schnellere Möglichkeit, ohne die Verschlüsseln mit md5(), da ein schnelles Einlesen sehr wchtig ist (zeitkritisch).
AndyB
Re: doppelte Datensätze beim INSERT ignorieren
Posted: 2004-02-17 18:27
by outofbound
Einen Unique Index drüber legen?
*SQL rat*
Andererseits:
Was willst du genau machen, warum, und geht es nicht auch anders?
(z.B. mit replace ?)
Gruss,
Out
Re: doppelte Datensätze beim INSERT ignorieren
Posted: 2004-02-17 19:18
by andreasbinder
Mein Problem liegt darin, dass die Kombination aus den 3 Spalten Name, Anschrift und Zusatz das eindeutige Kriterium ergeben und damit berücksichtigt werden müssen. Außerdem ist die ID auto_increment.
AndyB
Re: doppelte Datensätze beim INSERT ignorieren
Posted: 2004-02-17 19:42
by php-tom
AndreasBinder wrote:Mein Problem liegt darin, dass die Kombination aus den 3 Spalten Name, Anschrift und Zusatz das eindeutige Kriterium ergeben und damit berücksichtigt werden müssen. Außerdem ist die ID auto_increment.
Dann erzeuge doch einen zusammengesetzten, eindeutigen Index über die betreffenden Spalten. Geht ganz einfach mit phpMyAdmin.
Wird als ein einziger Index angelegt und betrifft die o.g. 3 Spalten.
Habe ich für ein Projekt mal gemacht und funktioniert einwandfrei!
Gruss,
Thomas
Re: doppelte Datensätze beim INSERT ignorieren
Posted: 2004-02-17 20:09
by andreasbinder
Danke.
Re: doppelte Datensätze beim INSERT ignorieren
Posted: 2004-02-17 22:22
by 127.0.0.1
Guck mal, ob ein DISTINCT auch bei MySQL funzt (ich kenns nur bei SAPDB) und obs auch beim insert funzt
gruß, Loopback
Re...
Posted: 2004-02-18 12:03
by outofbound
So, euch widme ich meinen 300sten ;)
Das kommt ganz auf die SQL version an, deswegen auch *sql rat*.
Grundsätzlich sollte ein Index über die drei Spalten jedoch tadellos funktionieren, und
das ganze auch entsprechend schnell machen, da du ja wahrscheinlich auch in dieser
Form auf die Daten zugreifen willst.
Leider kann man dazu nichts sagen, da die Datenmenge, das Datenmodell und auch
die Verwendungszwecke der Daten nicht gegeben sind.
Die Frage ist, warum muss das einlesen schnell funktionieren?
Vielleicht würden auch Transaktionen helfen?
Fragen über Fragen ;)
Gruss,
Out