php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 18.08.2011, 11:40  
Benutzer
 
Registriert seit: 01.07.2008
Beiträge: 72
groovemachine befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Maximale Größe einer CSV für mySQL import?

Liebe PHP-Gemeinde,

nach zahllosen Recherchen über das Thema "CSV in mySQL importieren" und genauso vielen Tests habe ich nun doch noch an die echten Profis eine Frage.

Folgender Sachverhalt:

Ich habe eine Test CSV, diese hat 3 Spalten und 2 Zeilen (also ohne Überschrift) und lade diese mit folgendem Code in meine Datenbank:

PHP-Code:
 $conn mysql_connect("localhost","root","");
 
mysql_select_db("mc_xxsta001");
 
 if(!
$conn) { 
 die (
"Keine Datenbankverbindung");
 }
 
$fp fopen("csv/test.csv","r");
 
$handel fgetcsv($fp,100000,";");
 while (
false == feof($fp)) {
  @
$handel=fgetcsv($fp,10000,";");
  if( 
== count($handel
&& 
"" !=trim($handel[0]) 
&& 
"" !=trim($handel[1]) 
&& 
"" !=trim($handel[2])) {
  
$sql "INSERT INTO test (test1,test2,test3) VALUES ('$handel[0]','$handel[1]','$handel[2]')";
  
$erg mysql_query($sql);
 
  } 
  }  
 
mysql_close(); 
Das funktioniert ohne Probleme!

Nun geht es aber in Wirklichkeit um eine CSV-Datei, die 62 Spalten und über 6.000 Zeilen hat. Diese würde ich gerne importieren. Wenn ich aber der oben dargestelltn Logik folge und diesen Code meinen Bedüfnissen anpasse, wie z.B.:
PHP-Code:
 $conn mysql_connect("localhost","root","");
 
mysql_select_db("mc_xxsta001");
 
 if(!
$conn) { 
 die (
"Keine Datenbankverbindung");
 }
 
$fp fopen("csv/echte.csv","r");
 
$handel fgetcsv($fp,100000,";");
 while (
false == feof($fp)) {
  @
$handel=fgetcsv($fp,10000,";");
  if( 
62 == count($handel)  
//Spalte 1 als 0 | Spalte 62 als 61
&& "" !=trim($handel[0]) 
&& 
"" !=trim($handel[1]) 
&& 
"" !=trim($handel[2])
.....
bis && !=trim($handel[61]) {
  
$sql "INSERT INTO echt (..) VALUES ('$handel[0]','$handel[1]','$handel[2].......,'$handel[61]'')";
  
$erg mysql_query($sql);
 
  } 
  }  
 
mysql_close(); 
Dann gehts nicht!!!

Gibt es hier eine Sperre, die den Code abbricht, wenn er zu lange läuft?
Warum funktioniert dieser SQL-Code nicht in PHP?
PHP-Code:
LOAD DATA LOCAL INFILE 'C:\\xampp\\tmp\\php2CD.tmp' INTOTABLE `echtFIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\'LINES TERMINATED BY '\r\n'# 6482 Zeile(n) betroffen 
Kann mit bitte jemand einen heilenden Ansatz geben?

Danke schonmal für die Zeit fürs Lesen und Gedanken machen.

Viele Grüße
groovemachine ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 18.08.2011, 11:54  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

also eigentlich gibts keine Einschränkung, wenn du die CSV mit php verarbeitest - und wenn es obendrein dein Webserver ist ...
bis auf die maximale Ausführungszeit von normalerweise 30 Sekunden ....
dann stell doch einfach mal die maximale Ausführungszeit entsprechend ein ...
PHP-Code:
set_time_limit(0); 
VOR die Verarbeitung in der Schleife ...

aber je nach vorliegenden Daten, würde ich mir deine riesengroße IF-Abfrage nochmal anschauen ..

kannst du wirklich ausschließen, dass einzelne Datenwerte nicht doch mal leer sind (beabsichtigt!!) ...
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 18.08.2011, 12:22  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

ich verarbeite mit folgendem Code CSV-Dateien mit mehr als 100.000 Zeilen a ca. 20 Feldern:
PHP-Code:
<?php
set_time_limit
(0);
include 
'mysql_connect.php';

$z 0;
$fp fopen'datei.csv''r' );
while (
$teile fgetcsv($fp1024,';')) {
    
$z++;
    if ( 
$z == ) continue; // Überschriftszeile nicht verarbeiten
    
    // Nur importieren, wenn nicht alle Spalten =='' sind
    
$ok false;
    foreach ( 
$teile as $feld ) {
        if ( 
$feld != '') {
            
$ok true;
            break;
        }
    }
    
    
// Importieren
    
if ( $ok ) {
        
$sql_ins "INSERT INTO tabelle 
                    SET 
                        col00 = '" 
mysql_real_escape_string($teile[0])    . "',
                        col01 = '" 
mysql_real_escape_string($teile[1])    . "',
                        ...
                        col61 = '" 
mysql_real_escape_string($teile[61])    . "'";
                        
        
mysql_query($sql_ins) or die(mysql_error());
    }
}

fclose($fp);

echo 
'fertig';
Deine gesuchte prüfung habe ich mal dazugebaut - bei mir sind auch Leerwerte in manchen Spalten erlaubt
__________________
Warum denkt mein Hund eigentlich immer dann, wenn es an der Tür klingelt, es sei für ihn?
Wolla ist offline   Mit Zitat antworten
Alt 18.08.2011, 13:40  
Benutzer
 
Registriert seit: 01.07.2008
Beiträge: 72
groovemachine befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank Ihr 2!!! Stellt Euch eine Träne der Freude in meinem linken Auge vor!

Super! Danke!

Ich habe aber dennoch eine Frage:

PHP-Code:
while ($teile fgetcsv($fp1024,';')) {
    
$z++;
    if ( 
$z == ) continue; // Überschriftszeile nicht verarbeiten
 
    // Nur importieren, wenn nicht alle Spalten =='' sind
    
$ok false;
    foreach ( 
$teile as $feld ) {
        if ( 
$feld != '') {
            
$ok true;
            break;
        }
    } 
Das ist die Prüfung, dass Leerwerte erlaubt sind (if($feld !=''))??

War das der Fehler in meinem Code? "Keine leeren Werte erlaubt!"


Aber nochmals 1.000 Dank!

Viele Grüße
Tobi
groovemachine ist offline   Mit Zitat antworten
Alt 18.08.2011, 13:54  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

da ist kein FEHLER in deinem Code ...

es ist allenfalls eine logische Frage, ob eben "leere" Datenwerte vorkommen dürfen oder alle Spalten komplett Daten enthalten müssen

Als ich vor einer ähnlichen Aufgabe stand, hab ich halt mal in die CSV bzw die ursprüngliche Datenquelle geschaut und gesehen, "AHA .. da gibts jede Menge nicht ausgefüllte Felder" - deswegen war der Datensatz trotzdem gültig ... also Alles importieren, wo gewisse Kriterien erfüllt waren (bei mir eine Vertragsnummer als Identifikationskriterium) ...

Der Rest ist halt einfach .. PHP ist nicht unendlich schnell .. also Zeitlimit erstmal abschalten (auf 0 setzen) ..
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 18.08.2011, 16:13  
Benutzer
 
Registriert seit: 01.07.2008
Beiträge: 72
groovemachine befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für diese Ausführung!

So ganz ist der Groschen noch nicht gefallen, aber das liegt wohl an der Hitze.

Danke nochmals und alles Gute.
groovemachine ist offline   Mit Zitat antworten
Alt 18.08.2011, 21:02  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Die Schleife macht folgendes: Wenn ALLE Felder der eingelesenen Spalte Leerstrings sind, dann wird das nicht importiert.

(Zuerst ist $ok auf false. Dann wird eine Schleife durch alle Felder der Zeile gestartet. Sobald ein Feld ungleich '' ist, wird $ok auf true gekippt und die Schleife und somit weitere Prüfungen beendet.)

Das ist so dumm gar nicht. Ich hatte schon CSV-Dateien mit 50.000 Zeilen, die irgendeine Mickimaus aus Excel-Tabellen in Excel zusammenkopiert hat und die hübsch bei jedem Wechsel des Spreadsheets eine artige Leerzeile gemacht hat. Damit man nachvollziehen kann, wo ein neues Spreadsheet anfing. Ergebnis: Jede Menge "Leerzeilen" in der CSV.
__________________
Warum denkt mein Hund eigentlich immer dann, wenn es an der Tür klingelt, es sei für ihn?
Wolla ist offline   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
Mysql funktioniert nicht (Erweiterung nicht erkannt!?) pfump Server, Hosting und Workstations 10 17.03.2012 11:07
Fehler bei CSV Import > MySQL fulltilt Datenbanken 8 20.08.2010 14:53
MySQL Import - fehlende Hochkommas urs63 Datenbanken 7 22.06.2010 08:10
csv datei über php in mysql import Rutor PHP Tipps 2010 1 30.03.2010 11:58
MySQL Konsole und Umlaute unter Windows [LÖSUNG] f4ckm5 Datenbanken 8 30.03.2009 22:10
csv import in mysql Gunnar2100 Scriptbörse 4 12.03.2009 18:25
csv import in mysql Gunnar2100 PHP Tipps 2009 10 12.03.2009 11:17
[Erledigt] Maximale Größe eines Array tomateundgurke PHP Tipps 2009 5 23.02.2009 15:44
Lerne Grundlagen | Quellensammlung cycap PHP Einsteiger 0 12.11.2008 16:23
von mysql tabellen die größe in bytes von bestimmten zeilen Blank Datenbanken 5 07.08.2006 15:40
MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
große datenmengen aus mysql auslesen bratwurstschorsch PHP Tipps 2005-2 6 04.08.2005 16:05
xampp mysql export und import -.- Server, Hosting und Workstations 3 19.02.2005 12:03
MySQL Import über txt-File... PHP Tipps 2004 2 03.11.2004 22:46
Maximale Upload Größe PHP Tipps 2004 2 12.07.2004 20:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
csv maximale größe, mysql import größe, mysql importgröße, max größe csv, mysql import csv, maximale größe csv datei, maximale größe csv, mysql importgröße ändern, php mysql zeit import 100000 datensätze, mysql import csv größe, größe csv, datenimport in mysql maximale dateigröße, csv mit 100000 datensätzen, maximalgröße csv datei, maximale größe mysql, mysql grosse csv einfuegen, csv mysql dateigröße, mysql import großes csv maximalgröße ändern, csv import php maximale anzahl, csv file import mysql maximale größe

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:44 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