2016-09-29 2 views
-1

Der Versuch, Tabellen mit PHP- und CSV-Import in MySQL DB zu aktualisieren. Und ich brauche Hilfe.CSV-Import nach MySQL mit PHP

Ich habe zwei Tabellen: Benutzer und Balance.

  1. Benutzer
    ID | user_login |
    1 | name1 |
    2 | name2 |

  2. Balance
    user_id | user_balance |
    1 | 1000 |
    2 | 2000 |

Query for betreiben:

SELECT users.user_login, balance.user_balance 
FROM `users` , `balance` 
WHERE `ID` = `user_id` 

CSV-Datei haben diese Struktur:

name1; 3000
name2; 5000

Aber ich weiß nicht, wie man Aktualisieren Sie, dass zwei verbundene Tabellen mit ID und user_id CSV bilden.

Ich werde mich für jede Hilfe und Beratung freuen. Vielen Dank!

+1

Mögliche Duplikat [MySQL, Update mehrere Tabellen mit einer Abfrage] (http://stackoverflow.com/questions/4361774/mysql-update-multiple-tables-with-one-query) –

+0

Diese Frage ist zu breit und auch unklar. Auf der einen Seite gibt es die Datenlast. Keine Erwähnung dessen, was mit Einfügungen im Vergleich zu Aktualisierungen fehlender erster Tabellendaten zu tun ist. Dann gibt es das Update mit einem Join. Einige könnten für "LOAD DATA INFILE" (mein Ansatz) schwingen. Andere gehen den langsamen Weg (für große Tabellen) und haben PHP File I/O. – Drew

+1

Bitte fügen Sie keine Antwort zu Ihrer Frage hinzu. Verwenden Sie stattdessen das Antwortfeld (wenn Ihre Frage erneut geöffnet wird). –

Antwort

4

Zuerst erhalten Sie die Daten aus der CSV-Datei.

$row = 1; 
if (($handle = fopen("data.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     echo "<p> $num fields in line $row: <br /></p>\n"; 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo $data[$c] . "<br />\n"; 
     } 
    } 
    fclose($handle); 
} 

Dann aktualisieren Abfrage.

UPDATE balance b JOIN users u ON u.ID = b.user_id 
SET b.user_balance = $data['balance'] 
WHERE u.user_login = $data['user_login'] 
1

können Sie versuchen, diese Update Statement:

UPDATE balance b 
JOIN users u ON u.ID = b.user_id 
SET b.user_balance = '@balance' 
WHERE u.user_login = '@name' 

Wo @balance und @name sind Werte aus der CSV.