Frage

Ich gründe einen Uploader (mit PHP) für meine Klienten, wo sie eine CSV auswählen können (in einem vorgegebenen Format) auf ihrem Computer hochladen. Die CSV wird wahrscheinlich 4000-5000 Reihen. PHP wird die Datei, indem jede Zeile der CSV Lese und Einführen direkt in die DB-Tabelle verarbeitet werden. Dieser Teil ist einfach.

jedoch idealerweise bevor diese Daten an die Datenbanktabelle angehängt, würde Ich mag 3 der Spalten zu überprüfen (A, B und C) und überprüfen, um zu sehen, ob ich schon eine passende Kombination aus diesen drei Feldern in der haben Tabelle BEJAHENDENFALLS ich würde lieber die Zeile UPDATE statt anhängen. Wenn ich nicht eine passende Kombination aus diesen drei Spalten habe ich voran gehen wollen und die Zeile einfügen, werden die Daten an die Tabelle angehängt wird.

Mein erster Gedanke ist, dass ich die Spalten A, B und C ein eindeutiger Index in meinem Tisch machen könnte und dann INSERT nur jede Zeile, erkennen einen ‚nicht bestanden‘ INSERT (aufgrund der Beschränkung meines eindeutigen Index) irgendwie und dann machen Sie das Update. Es scheint, dass diese Methode könnte effizienter sein als nur eine separate SELECT-Abfrage für jede Zeile zu müssen, um zu sehen, ob ich eine passende Kombination in meinem Tisch bereits habe.

Ein dritter Ansatz einfach anhängen alles sein kann, keine MySQL eindeutigen Index verwenden und dann nur die neueste einzigartige Combo greifen, wenn der Client später die Tabelle abfragt. Aber ich versuche, in dieser Tabelle eine Tonne von nutzlosen Daten zu vermeiden ist.

Gedanken über die besten Praktiken oder clevere Ansätze?

War es hilfreich?

Lösung

Wenn Sie die 3 Spalten, um die eindeutige ID machen, können Sie eine INSERT mit ON DUPLICATE KEY tun.

INSERT INTO table (a,b,c,d,e,f) VALUES (1,2,3,5,6,7)
  ON DUPLICATE KEY UPDATE d=5,e=6,f=7;

Sie können mehr über diese praktische Methode lesen Sie hier in der MySQL-Handbuch .

Andere Tipps

Wenn Sie einen eindeutigen Index für die (A, B, C) Spalten hinzufügen, dann können Sie eine href verwenden <= "http://dev.mysql.com/doc/refman/5.1/en/replace.html "rel =" nofollow "> REPLACE dies in einer Anweisung zu tun:

REPLACE funktioniert genau wie INSERT, außer dass, wenn eine alte Zeile in der Tabelle hat den gleichen Wert wie eine neue Zeile für eine PRIMARY KEY oder einen eindeutigen Index, der alte Zeile gelöscht wird, bevor die neue Zeile eingelegt ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top