CSV import, format stimmt nicht

syntax

Mitglied
Hallo Leute,
ich habe eine Script mit dem ich eine CSV-Datei in meine MySQL-DB importiere.

Die CSV Datei ist wie folgt aufgebaut:

Start : 01.02.2012 12:36
Auto: Honda
Start-Datum: 01.02.2012
Start-Uhrzeit: 12:21:15
End-Datum: 01.02.2012
End-Uhrzeit: 12:36:46
Streckenzeit: 00:15:31
Wertung: 10,09

Tabelle ist wie folgt formatiert:

start datetime
Auto varchar(255)
start-datum date
start-zeit time
ende-datum date
ende-zeit time
streckenzeit time
Wertung decimal(9,2)

Und das steht nach dem import in meiner DB-Tabelle

start 0000-00-00 00:00:00
Auto Honda
start-datum 2001-02-20
start-zeit 12:21:15
ende-datum 2001-02-20
ende-zeit 12:36:46
streckenzeit 00:15:31
Wertung 10.00

Wie Ihr seht stimmt nur Auto / Start-Zeit / Ende-Zeit / Streckenzeit
aber ich weiß nicht warum er Start nicht übernimmt, das Datum durcheinanderhaut und bei der Wertung nicht 10.09 anzeigt.

Habe ich einen Fehler in der SQL-Tabelle oder liegt es am Script:

PHP:
$link = mysql_connect('', '', '') or die("Keine Verbindung möglich: " . mysql_error());

echo "Verbindung zum Datenbankserver erfolgreich!<br>";

mysql_select_db("") or die("Auswahl der Datenbank fehlgeschlagen");

echo "Verbindung zum Datenbank erfolgreich!<br>";

$tabelle = 'auto';

$csv_datei = 'test.csv';

$sql = "LOAD DATA LOCAL INFILE '{$csv_datei}'
		INTO TABLE `{$tabelle}`
		FIELDS TERMINATED BY ';'
		OPTIONALLY ENCLOSED BY '\"'
		LINES TERMINATED BY '\n'
		()";

$result = mysql_query($sql);
           echo  mysql_error();
           echo $result;

Vielleicht habt Ihr eine Idee.
 
Das liegt daran, dass die importierten Daten nicht MySQLkonform sind.

Die Tage sind in DD.MM.YYYY und werden in YYYY-MM-DD geschmissen.
Bei der Wertung ist das Komma statt dem erwarteten Punkt das Problem.

Du kannst jetzt entweder die Datei anders aufbauen, oder die Daten innerhalb des Statements konvertieren.

[...]Die Spaltenliste kann entweder Spaltennamen oder Benutzervariablen enthalten. Bei Benutzervariablen gestattet Ihnen die SET-Klausel die Durchführung einer Werteumwandlung vor der Zuweisung des Ergebnisses zu den Spalten.[...]
[https://dev.mysql.com/doc/refman/5.1/de/load-data.html]]

Im unteren Teil der Seite findest du n paar Beispiele dazu.

@edit: ich sehe gerade dass es hierzu auch ein Tutorial gibt, das ebenjene zwei Punkte (REPLACE/STR_TO_DATE) behandelt.
 
Zuletzt bearbeitet:
Hallo Leute, das mit dem import meiner CSV-Datei klappt wunderbar.
Würde jetzt gern noch in meine Tabelle schreiben wer die Datei hochgeladen hat.

Ich habe dazu bei SET einfach -> mitarbieter = ".$SESSION['mitarbeiter'].",
eingefügt. Die Sessionvariable gibt es, wird auch mit echo ausgegeben und die Spalte mitarbeiter in meiner Tabelle gibt es auch, allerdings schreib er diesen Wert nicht in meine Tabelle. Hab Ihr eine Idee wo mein Fehler liegt.

PHP:
$link = mysql_connect('', '', '') or die("Keine Verbindung möglich: " . mysql_error());

echo "Verbindung zum Datenbankserver erfolgreich!<br>";

mysql_select_db("") or die("Auswahl der Datenbank fehlgeschlagen");

echo "Verbindung zum Datenbank erfolgreich!<br>";

$tabelle = 'auto';

$csv_datei = 'test.csv';

$sql = "LOAD DATA LOCAL INFILE '{$csv_datei}'
        INTO TABLE `{$tabelle}`
        FIELDS TERMINATED BY ';'
        OPTIONALLY ENCLOSED BY '\"'
        LINES TERMINATED BY '\n'
        IGNORE 1 LINES
        ( @dummy, @dummy, kunde, auto, @datum, notizen, @dummy)

        SET ersteller = ".$SESSION['mitarbeiter'].",
              startdatum = STR_TO_DATE(@datum, GET_FORMAT(DATE,'EUR'))";

$result = mysql_query($sql);
           echo  mysql_error();
           echo $result;
 
Zuletzt bearbeitet:
Hallo,

wenn $SESSION['mitarbeiter'] eine Zeichenkette ist (und Spalte `ersteller` varchar oder sowas) dann müsste es so geschrieben werden:

Code:
SET ersteller = '".$SESSION['mitarbeiter']."', 
usw.
 
Es heißt ja auch $_SESSION mit einem Unterstrich!

Aber para_noid hat auch Recht, Anführungszeichen fehlen auch.
 

Neue Beiträge

Zurück