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
doppelte Datensätze beim INSERT ignorieren
-
- Posts: 63
- Joined: 2002-07-18 12:09
Re: doppelte Datensätze beim INSERT ignorieren
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.AndreasBinder wrote:ID(auto_increment)|Name|Anschrift|PLZ|Zusatz
-
- Posts: 28
- Joined: 2003-09-29 11:59
Re: doppelte Datensätze beim INSERT ignorieren
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
Gute Idee!
Gibt es noch eine schnellere Möglichkeit, ohne die Verschlüsseln mit md5(), da ein schnelles Einlesen sehr wchtig ist (zeitkritisch).
AndyB
-
- Posts: 470
- Joined: 2002-05-14 13:02
- Location: Karlsruhe City
Re: doppelte Datensätze beim INSERT ignorieren
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
*SQL rat*
Andererseits:
Was willst du genau machen, warum, und geht es nicht auch anders?
(z.B. mit replace ?)
Gruss,
Out
-
- Posts: 28
- Joined: 2003-09-29 11:59
Re: doppelte Datensätze beim INSERT ignorieren
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
AndyB
-
- Posts: 35
- Joined: 2002-06-28 16:48
Re: doppelte Datensätze beim INSERT ignorieren
Dann erzeuge doch einen zusammengesetzten, eindeutigen Index über die betreffenden Spalten. Geht ganz einfach mit phpMyAdmin.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.
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
-
- Posts: 28
- Joined: 2003-09-29 11:59
-
- Posts: 38
- Joined: 2002-08-15 10:53
- Location: Hamburg
Re: doppelte Datensätze beim INSERT ignorieren
Guck mal, ob ein DISTINCT auch bei MySQL funzt (ich kenns nur bei SAPDB) und obs auch beim insert funzt
gruß, Loopback
gruß, Loopback
-
- Posts: 470
- Joined: 2002-05-14 13:02
- Location: Karlsruhe City
Re...
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
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