php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.03.2010, 12:09  
Neuer Benutzer
 
Registriert seit: 11.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
sydios befindet sich auf einem aufstrebenden Ast
Standard CSV Datum // LOAD DATA LOCAL on the fly konvertieren

Hi,

ich muss täglich eine paar CSV Dateien in MySQL Importieren,
dafür habe ich mir ein Script gebastelt das das für mich erledigt.
Leider ist das Datum in ein paar Spalten nicht MySQL Konform.
Und zwar so 01.01.2010, gibt es eine Möglichkeit das gleich beim Import
so zu konvertieren das MySQL es schluckt?

Hier mein Code :

PHP-Code:
$query "            
            LOAD DATA LOCAL INFILE 'xxx.csv' REPLACE INTO TABLE xxx
            FIELDS TERMINATED BY ','
            ENCLOSED BY '\"'
            ESCAPED BY '\\\\'
            LINES TERMINATED BY '\\r\\n'
            IGNORE 1 LINES"

in dem besagten csv gibt es insgesamt 4 Spalten mit Datum.

Vielen dank schon mal im vorraus

Syd...
sydios ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.03.2010, 12:49  
thomas_w
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von sydios Beitrag anzeigen
Und zwar so 01.01.2010, gibt es eine Möglichkeit das gleich beim Import
so zu konvertieren das MySQL es schluckt?

Vielen dank schon mal im Voraus

Syd...
Ob es direkt mit dem LOAD DATA geht weiß ich nicht, aber es gibt wie immer mehrere Ideen dazu:

a) Die CSV Datei gleich passend aufbauen...

b) Die CSV nicht in die Echt Tabelle, sondern in eine temp_tabelle einlesen. Dann eine Feldkonvertierung auf der temp_tabelle vornehmen und nun per

Code:
INSERT INTO echt_tabelle
SELECT * FROM temp_tabelle
Alles auf einen Schlag in die Echttabelle einlesen.

Grüße
Thomas
  Mit Zitat antworten
Alt 11.03.2010, 14:55  
Neuer Benutzer
 
Registriert seit: 11.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
sydios befindet sich auf einem aufstrebenden Ast
Standard

Hi,

danke für den Hinweis, ich habs direkt mal getestet.
Aber leider hat die CSV so viele Zeilen, das nicht mal ein erhöhen
der Scriptlaufzeit auf 600 sec. aussreicht das alles per PHP zu konvertiern.

Auch ist es leider nicht möglich die CSV schon im vorraus zu konvertieren da
sie von einem externen Dienstleister kommt.

Für weitere Tips bin ich sehr dankebar
sydios ist offline   Mit Zitat antworten
Alt 11.03.2010, 15:26  
thomas_w
Gast
 
Beiträge: n/a
Standard

Im Handbuch steht folgendes..

Code:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...)] 
Vielleicht hilft folgendes Beispiel...(so lassen sich einzelne Spalten nach-/bearbeiten).

Code:
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(column1, @var1)
SET column2 = @var1/100;
Grüße
Thomas
  Mit Zitat antworten
Alt 11.03.2010, 15:59  
Neuer Benutzer
 
Registriert seit: 11.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
sydios befindet sich auf einem aufstrebenden Ast
Standard

Danke für den Hinweis, ich hab auch noch mal ein bischen gesucht und die
funktion STR_TO_DATE gefunden ich hab das jetzt so versucht.

PHP-Code:
$query "
                LOAD DATA LOCAL INFILE xxx.csv' REPLACE INTO TABLE xxx
                FIELDS TERMINATED BY ','
                ENCLOSED BY '\"'
                ESCAPED BY '\\\\'
                LINES TERMINATED BY '\\r\\n'
                IGNORE 1 LINES
                SET datum_feld = str_to_date(datum_feld, '%d.%m.%Y')
                "
;
        } 
Aber jetzt macht er mir in das Feld nur "NULL" rein.
sydios ist offline   Mit Zitat antworten
Alt 11.03.2010, 20:25  
thomas_w
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von sydios Beitrag anzeigen
Code:
$query = "
				LOAD DATA LOCAL INFILE xxx.csv' REPLACE INTO TABLE xxx
				FIELDS TERMINATED BY ','
				ENCLOSED BY '\"'
				ESCAPED BY '\\\\'
				LINES TERMINATED BY '\\r\\n'
				IGNORE 1 LINES
			==>   SET datum_feld = str_to_date($var???, '%d.%m.%Y')
				";
		}
Aber jetzt macht er mir in das Feld nur "NULL" rein.
Soweit ich die Doku verstehe, muss Du eine Variable (z. B. $var1) übergeben, die 1 steht vermutlich für die erste Variable der CSV-Datei. Somit war klar, warum bei Dir NULL übergeben wird, denn die Spalte datum_feld ist ja noch leer.

Einfach noch mal probieren.

Grüße
Thomas
  Mit Zitat antworten
Alt 12.03.2010, 11:17  
Neuer Benutzer
 
Registriert seit: 11.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
sydios befindet sich auf einem aufstrebenden Ast
Standard

Also irgendwie kappier ich das nicht mit den Variablen, hier jetzt noch mal meine Versuche.

PHP-Code:
query "LOAD DATA LOCAL INFILE 'E:xxx.csv' REPLACE INTO TABLE xxx
                (Test1, Test2, Test3, @Datums_feld, noch zig Felder...)
                FIELDS TERMINATED BY ','
                ENCLOSED BY '\"'
                ESCAPED BY '\\\\'
                LINES TERMINATED BY '\\r\\n'
                IGNORE 1 LINES
                SET Datums_feld = str_to_date(@Datums_feld, '%d.%m.%Y')
                "

ergebniss ist das jetzt überhaupt keine Daten mehr importiert werden.

PHP-Code:
$query "LOAD DATA LOCAL INFILE 'xxx.csv' REPLACE INTO TABLE xxx
                (Test1, Test2, Test3, @Var1, noch zig Felder...)
                FIELDS TERMINATED BY ','
                ENCLOSED BY '\"'
                ESCAPED BY '\\\\'
                LINES TERMINATED BY '\\r\\n'
                IGNORE 1 LINES
                SET Datums_feld = str_to_date(@Var1, '%d.%m.%Y')
                "

das gleich ergbniss.

Noch jemand eine Idee ?
sydios ist offline   Mit Zitat antworten
Alt 12.03.2010, 11:41  
thomas_w
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von sydios Beitrag anzeigen
Code:
$query = "LOAD DATA LOCAL INFILE 'xxx.csv' REPLACE INTO TABLE xxx
	           ==>	(@Test1, @Test2, @Test3, @Var1, noch zig @Felder...)
				FIELDS TERMINATED BY ','
				ENCLOSED BY '\"'
				ESCAPED BY '\\\\'
				LINES TERMINATED BY '\\r\\n'
				IGNORE 1 LINES
				SET Datums_feld = str_to_date(@Var1, '%d.%m.%Y')
				";
Fast richtig würde ich behaupten..
In der Variablenliste oben (@Test1, @Test2, ..) müssen alle Spalten als @var etc. aufgelistet sein.

Grüße
Thomas
  Mit Zitat antworten
Alt 12.03.2010, 11:43  
Neuer Benutzer
 
Registriert seit: 11.03.2010
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
sydios befindet sich auf einem aufstrebenden Ast
Standard

Das ist eigentlich nur die Liste der Spalten und nicht der Variablen.
Aber ich teste das gleich mal.
sydios ist offline   Mit Zitat antworten
Alt 12.03.2010, 13:23  
thomas_w
Gast
 
Beiträge: n/a
Standard

Stimmt, es ist ziemlich verwirrend. Ich baue mir heute Nachmittag ein Beispiel zusammen und melde mich dann wieder. Eventuell findest Du ja auch die Lösung inzwischen.

Grüße
Thomas
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
LOAD DATA INFILE Feldgröße moepmann Datenbanken 5 21.02.2010 22:02
LOAD DATA LOCAL INFILE mit PDO_MYSQLl unter PHP most Datenbanken 7 16.02.2010 13:04
mysqli_multi_query lässt Eintrag aus... Samhayne Datenbanken 8 07.02.2010 19:02
[Erledigt] php mit LOAD DATA INFILE geht nicht 6setzen PHP Tipps 2009 3 17.12.2009 05:59
OpenID und XAMPP nanatsusaia PHP Tipps 2009 2 20.11.2009 13:21
[MySQL] Existiert Alternative für LOAD DATA INFILE für stored Procedures? TheIfrit Datenbanken 1 14.10.2009 09:59
[Erledigt] LOAD DATA LOCAL INFILE problem !! gustave PHP Tipps 2009 2 29.07.2009 14:55
Fehler by load data infile php script cn-systems PHP-Fortgeschrittene 7 28.11.2008 13:59
CSV datei mit load data local infile Datenbanken 8 01.07.2005 11:23
update auf php 5.0.4 robo47 Server, Hosting und Workstations 6 10.04.2005 19:00
fgetcsv und Datum konvertieren PHP Tipps 2004 0 28.09.2004 11:40
LOAD DATA INFILE vom externen Ort kanti Datenbanken 0 30.08.2004 14:52
[Erledigt] load data infile - hört bei 127 einfach zu zählen auf? Datenbanken 3 01.07.2004 23:37
load data local Datenbanken 4 23.06.2004 14:28
csv import datum konvertieren Datenbanken 1 22.06.2004 07:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/datenbanken/65583-csv-datum-load-data-local-fly-konvertieren.html, load data infile csv beispiel, mysql datum importieren, load data infile csv mysql php, php csv on the fly, load data local ignore fields felder, mysql load data local infile php script csv zeilenweise, csv datum php, load data infile datum umwandeln, load data infile csv php, load data infile datum, load data local, mysql import datumsformat, csv datum, csv sql datum konvertieren, mysql escaped by \\\\ load data local infile, load data local infile convert, mysql null übergeben csv, mysql \load data local\ date, csv mit load data local

Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum