PHP Doppelter mySQL Import verhindern

ismon

Lieutenant
Registriert
Dez. 2006
Beiträge
734
Hallo zusammen,

ich steh gerade voll auf dem Schlauch und hoffe das mir jemand auf die Sprünge helfen kann.

Folgendes habe ich vor:

Ich habe eine mySQL Tabelle mit dem Namen "Kunden". In der Tabelle werden Kundendaten gespeichert und gibt es eine Spalte "Hash". Dort steht pro Kunde ein Wert drin.

Jetzt habe ich ein PHP Array in dem ebenfalls Kundendaten enthalten sind und auch pro Kunde ein Hash.

Ich will die Kunden aus dem Array in die DB speichern welche noch nicht in der DB vorhanden sind die.

Ich müsste jetzt also jeden Hash Eintrag aus der Array mit jedem Hash Eintrag aus der DB vergleichen und nur dann einen INSERT machen wir der Eintrag noch nicht vorhanden ist.

Ich habe schon vieles Versucht mit verschachtelten Schleifen usw. aber ich bekomme es einfach nicht hin...

Kann mir jemand auf die Sprünge helfen?

Viele Dank schonmal.

Gruß
Simon
 
Ein simpler Versuch wäre den Hash als unique zu definieren - dann scheitert der Insert mit einem Fehler den man abfangen kann.
 
der vorschlag von zeroflow hört sich gut an
eine umständlich möglichkeit wäre ein durchlauf des arrays mit foreach, dann irgendein select mit dem hash in der where-clause => wenn keine rows returned werden, dann insert, ansonsten next
 
Hi, Danke für die schnelle Antwort.
Wie kann ich das Feld mySQL als Unique definieren? Im PhpmyAdmin ist der Button Unique bei dem Feld grau und kann nicht geklickt werden.
Liegt das am Feldtyp?
 
möglich. was isses denn? BLOB/TEXT? bei denen würde es mich nicht wundern. Char-Arrays sollten hingegen auch aus Unique Key möglich sein.

Ach ja, nicht vergessen: ein Hash ist nicht einzigartig. 2 vollkommen unterschiedliche Ausgangswerte können denselben Hash erzeugen.
 
Mal so ausm blauen:
Code:
if select count(hash) from Kunden where hash=$hash = 0 then insert....
 
floq0r schrieb:
eine umständlich möglichkeit wäre ein durchlauf des arrays mit foreach, dann irgendein select mit dem hash in der where-clause => wenn keine rows returned werden, dann insert, ansonsten next

Das war eigentlich genau die Lösung über die ich die ganze Zeit nachgedacht habe. Damit funktioniert es nun erstmal. Danke.

Die Lösung über ein unique Feld in der DB werde ich mir nochmal anschauen.
 
Ändert nichts daran, dass Hashes nicht einzigartig sind und dir irgend wann in den Arsch beißen.
 
Zurück
Oben