2009-04-03 9 views
1

Hey Leute, hier ist mein Problem. Ich schreibe ein Drupal-Modul. Ein Benutzer lädt eine CSV-Liste von E-Mail-Adressen in einem Formular auf einen Server hoch. Ich muss einen JOIN auf meiner Datenbank machen, um eine Liste von eindeutigen Adressen aus der CSV-Datei und der DB zu erhalten (Nein, es ist nicht für Spam :). Wie mache ich einen SQL-Join mit einer CSV-Datei in PHP (speziell Drupal)?

Wie würde ich die hochgeladene CSV-Datei in ein Format konvertieren, dass ich einen SQL-Join mit einer Tabelle in meinem DB in PHP machen kann?

+0

Wird die CSV eine reguläre Struktur haben? –

Antwort

2

Sie können es direkt LOAD DATA INFILE

Oder verwenden laden, wenn Sie es vorziehen, lesen Sie es in PHP mit fgetcsv(), munge zum Inhalt Ihres Herzens, und sie in eine temporäre Tabelle einfügen.

+0

Eine Frage: Wo muss ich die Datei für MySQL setzen, um darauf zugreifen zu können? – jergason

+0

Ich glaube, dass mysql überall auf die Datei zugreifen kann, wenn Sie einen absoluten Pfad angeben, und der mysql-Benutzer hat Leseberechtigung für diese Datei –

1

Das Laden der Daten in eine "temporäre" Tabelle macht die Handhabung sehr einfach. Sie sollten einen Index auf die Tabelle anwenden, um Joins zu beschleunigen. Es ist jedoch möglicherweise schneller, den Index vor dem Laden der Daten zu löschen und ihn anschließend erneut zu erstellen. (Wie bei allen Leistungsempfehlungen, messen Sie Ihre eigenen Ergebnisse, bevor Sie eine komplexere Lösung wählen.)

+0

Wie würde ich es in eine temporäre Tabelle laden? Erstellen Sie einfach eine neue Tabelle für jeden Dateiupload und legen Sie sie ab, nachdem ich mit dem Join fertig bin. – jergason

+0

Sorry, genauer gesagt, wie würde ich eine temporäre Tabelle aus der Datei erstellen? Ich denke, ich verstehe, wie man die Tabelle erstellt, aber wie würde ich sie aus der hochgeladenen CSV-Datei einfügen? – jergason

+0

Wenn die CSV-Daten immer dasselbe Format haben, können Sie auch eine reguläre Tabelle erstellen, die Sie als "temporär" betrachten und deren Inhalt nach jedem Laden einfach TRUNCATE. Das Laden der Daten in Massen ist RDBMS-spezifisch, aber Sie können jede Zeile in der Datei immer in eine INSERT-Anweisung in PHP übersetzen. – yukondude