Sponsor-Board.de
LOAD DATA LOCAL INFILE - MySQL

+- Sponsor-Board.de (https://www.sponsor-board.de)
+-- Forum: Community (/forumdisplay.php?fid=56)
+--- Forum: Hilfe (/forumdisplay.php?fid=102)
+---- Forum: Scripting (/forumdisplay.php?fid=108)
+---- Thema: LOAD DATA LOCAL INFILE - MySQL (/showthread.php?tid=43855)


LOAD DATA LOCAL INFILE - MySQL - Aaron - 24.11.2013 20:41

Guten Abend,
kann man mit der Funktion von MySQL "LOAD DATA LOCAL INFILE" (wenn ich ne .csv Datei damit in die DB schreibe) irgendwie auf doppelte Einträge überprüfen (z.B. anhand von nem Namen) ?
Und diese dann eventuell überspringen und am Ende ausgeben ?
Gibts Alternativen ?

Freue mich über jede hilfreiche Antwort!

mfg Aaron


RE: LOAD DATA LOCAL INFILE - MySQL - Dennis - 25.11.2013 08:10

Schau dir dort: [Link: Registrierung erforderlich]
den dritten Punkt genauer an, das sollte deine Frage denke ich gut beantworten und auch erklären Smile

Ist zwar etwas PHP-lastig, aber denke, das könntest du mit wenigen Handgriffen selbst lösen.


RE: LOAD DATA LOCAL INFILE - MySQL - Aaron - 25.11.2013 09:36

das wird aber nicht auf doppelte Einträge eingegangen - wie man die Funktion verwendet weiß ich ja

Wenn ich die Datei vorher auf doppelte Einträge prüfe, würde das ewig dauern und nen Timeout geben, da es mehrere tausend Datensätze sind


RE: LOAD DATA LOCAL INFILE - MySQL - Dennis - 25.11.2013 10:31

Der direkte Abgleich der Datensätze ist meines Erachtens nach die einzige Möglichkeit.
Du könntest evtl. aus der Datenbank einen Export als CSV durchführen und abzugleichen, falls es da Funktionen für gibt, aber um einen Abgleich kommt man nicht drumherum.


RE: LOAD DATA LOCAL INFILE - MySQL - alcazar - 25.11.2013 20:26

Am besten is sowas über die DB direkt zu machen.
Wenn Du nach dem Primary Key gehst oder eine Spalte die Unique is, kannste eh keine doppelten DS einfügen.
Ansonsten könntest Du einen Insert-Trigger auf die Tabelle setzen der nachkuckt ob der DS schon vorhanden ist und wenn nicht das Insert ausführt.


RE: LOAD DATA LOCAL INFILE - MySQL - Aaron - 25.11.2013 20:54

der Kunde möchte, dass er ne Meldung bekommt, wenn was doppelt ist, nicht das es einfach nicht reingeschrieben wird

ich möchte ja die Datei direkt reinladen, wenn ich das mit nem Insert machen aus zb nem Array, dauert das ewig und es gibt nen Timeout, wie schon geschrieben mehrere tausend Einträge ...

das ist aber so wohl in der Funktion nicht möglich wie ich mittlerweile herausgefunden habe - daher schau ich vorher, ob ich die Datei iwie recht performant durchsuchen kann

danke für die Vorschläge


RE: LOAD DATA LOCAL INFILE - MySQL - alcazar - 26.11.2013 17:46

Weiß nich wie das bei MySQL is, beim SQL-Server z. B. kannste da ne Meldung ausgeben lassen, das z. B. der DS schon vorhanden is und nich neu eingefügt wird.

Alternative wäre halt die Datei schon vor der DB zu sortieren und ggf. doppelte zu entfernen, kann aber nich sagen wie das geht. Habe da zu wenig Ahnung von PHP, Perl & Co. :'(