Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 CSV-Dateien --> eine Tabelle
Hallo, ich habe mehere CSV-Dateien und möchte diese in eine "große" Tabelle eintragen.
Geht das oder MUSS ich mehrere Tabellen anlegen?
Wenn es geht, unter welchem Stichwort muss ich weiter suchen?
Gruß Stoner
PS: die CSV-Dateien haben einige gemeinsame Felder und einige unterschiedliche, außerdem sind sie alle in unterschiedlicher Reihenfolge und die Anzahl der Felder variiert.
?,
wenn die csvs unterschiedliche strukturen beschreiben, wärs doch dämlich, die in _eine_ table zu packen, oder? ich zumindest pack nicht meine besucherdaten mit denen von gästebuch oder der menustruktur zusammen in eine table.
wenn sie natürlich sinngemäß zusammengehören und deshalb auch in _einer_ table stehen sollten, kannst du auch 34265,4 dieser csvs in _eine_ table einfügen
:confused:
Mein Chef hat mir den Auftrag dazu gegeben. Er möchte alle Daten in einer Tabelle haben "Dann ist alles zusammen".
Aber wie mache ich das dann? Wie sage ich den CSV-Daten, in welches Feld sie gehören?
Gruß Stoner
PS: die Tabelle ist schon vorhanden
mrhappiness 18-12-2003, 15:01 beschreib mal den inhalt, was steht in der einen datei, was in der anderen?
also, es geht um csv-dateien von affiliate-programmanbietern, die daten dieser csv-dateien beinhalten :
datum, nummer, sbid, provision, leads, sales und in einigen csvs sind die leads und sales noch genauer aufgedröselt.
also, vom inhalt passen sie zusammen, aber ....
in der tabelle sind nun alle felder aufgeführt, wenn ich nun eine der csvs eintragen will, kann es sein, dass sie nur in feld 1, feld5, feld 7 und feld 12 der datenbanktabelle eingetragen werden soll.
Einzelne scripte, um die csvs in einzelne tabellen einzutragen habe ich schon, aber wie mache ich das, dass die csv nur in diese bestimmten felder eingetragen wird?
Fruß Stoner
mrhappiness 18-12-2003, 15:51 wenn felder leer sind, sieht eine zeile in der csv datei dann nicht so ausfeld 1;;feld 3;feld4;;;;feld7?
schau dir auch mal fgetcsv (http://www.php.net/fgetcsv) an
Original geschrieben von mrhappiness
wenn felder leer sind, sieht eine zeile in der csv datei dann nicht so aus
wäre ja schlimm, wenn es nicht so wäre.
somit sollte nur noch
sind die leads und sales noch genauer aufgedröselt.
etwas arbeit erfordern.
das habe ich mir schon angeschaut.
also, beispiel:
csv1 =
datum; nummer; status; subid; programm; leads/sales; netto; provision;
csv2 =
datum; views-anzahl; views-provision; clicks-anzahl; clicks-provision; leads-anzahl; leads-provision; sales-anzahl; sales-provision; provision;
csv3 =
programm_id; programmname; datum; provision; status
ich habe nun eine tabelle entwickelt, die alle felder inne hat, (natürlich keine doppelten) und da hinein möchte ich nun die csvs eintragen
ich habe es mit
<?php
$db_Hostname[0] = "localhost";
$db_UserName[0] = "";
$db_Password[0] = "";
$db_Database[0] = "abrechnung";
$db_Table[0] = "partner";
$db_File[0] = "c:/xampp/htdocs/test/beispiel.csv";
$db_Terminated[0] = ";";
$select_db = 0;
if (isset ($select_db))
{
mysql_connect($db_Hostname[$select_db], $db_UserName[$select_db], $db_Password[$select_db]) || die("Can't Connect to Database: ".mysql_error());
mysql_select_db($db_Database[$select_db]);
$del = "DELETE FROM ".$db_Table[$select_db];
$sql = "LOAD DATA INFILE '$db_File[$select_db]' REPLACE INTO TABLE ".$db_Table[$select_db].(Datum,Nr,Sts,SubID,Prg,L_S,Netto,Prov_Wert,Prov)"FIELDS TERMINATED BY '$db_Terminated[$select_db]' IGNORE 1 LINES";
if (mysql_query ($del) and mysql_query ($sql))
{
echo "Übertragung erfolgreich";
}
else
{
echo "Übertragung fehlgeschlagen. Grund: ". mysql_error ();
}
}
exit();
?>
versucht, bekomme aber immer die fehlermeldung
Parse error: parse error, unexpected ',' in C:\xampp\htdocs\test\affilinet2.php on line 44
???
Gruß
Stoner
Das ist die Zeile mit dem LOAD DATA
haha,
das du da nen parse error kriegst, glaub ich ....
siehst doch schon am highlighting, oder muß der LOAD DATA wirklich so aussehen?
würde vielem widersprechen, was ich über sql weiß ...
wenn ich die felder nicht angebe und die csv in eine eigene tabelle schreibe - funktionierts
ich denke, dass die felder-angaben an der falschen stelle sind, dabei habe ich sie aus dem mysql-manual
Gruß Stoner
also,
ich kenne den befehl nicht, würde aber rein intuitiv
$sql = "LOAD DATA INFILE '".$db_File[$select_db]."' REPLACE INTO TABLE ".$db_Table[$select_db]." (Datum,Nr,Sts,SubID,Prg,L_S,Netto,Prov_Wert,Prov) FIELDS TERMINATED BY '".$db_Terminated[$select_db]."' IGNORE 1 LINES";
schreiben.
aber, wenn ich mal in mein manual schau....
6.4.9 LOAD DATA INFILE Syntax
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY '\t']
[[OPTIONALLY] ENCLOSED BY '']
[ESCAPED BY '\\' ]
]
[LINES
[STARTING BY '']
[TERMINATED BY '\n']
]
[IGNORE number LINES]
[(col_name,...)]
seh ich da keine möglichkeit, die spalten anzugeben ... oder bin ich blind?
habs
If you wish to load only some of a table’s columns, specify a field list:
mysql> LOAD DATA INFILE 'persondata.txt'
-> INTO TABLE persondata (col1,col2,...);
funktioniert die oben angegebene query?
wenn du ein bisschen weiter nach unten scollst, dann steht da:
Wenn Sie Daten nur in einige Tabellenspalten einladen wollen, geben Sie eine Felderliste an:
mysql> LOAD DATA INFILE 'personen.txt'
INTO TABLE personen (spalte1,spalte2,...);
Eine Felderliste müssen Sie ausserdem angeben, wenn die Reihenfolge der Felder in der Eingabedatei von der Reihenfolge der Tabellenspalten abweicht. Ansonsten kann MySQL nicht feststellen, wie er Eingabefelder Tabellenspalten zuordnen soll.
es bleibt dann die frage, wo muss die feldangabe hin?
Gruß Stoner
also, wenn ich das nun so schreibe:
$sql = $sql = "LOAD DATA INFILE '".$db_File[$select_db]."'
REPLACE INTO TABLE '".$db_Table [$select_db]."' (Datum, Nr, Sts, SubID, Prg, L_S, Netto, Prov_Wert, Prov)
FIELDS TERMINATED BY '".$db_Terminated[$select_db]."'
IGNORE 1 LINES";
dann kommt folgende fehlermeldung:
Übertragung fehlgeschlagen. Grund: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''partner' (Datum, Nr, Sts, SubID, Prg, L_S, Netto, Prov_Wert, P
Gruß Stoner
hmm,
da paßt wohl was nicht, ich hab keine zwei ' hintereinander geschrieben
near ' ' partner ' (Da
lass mal die ' ' weg beim table namen
moin, moin
hat bisher alles nix gebracht, hab es nun etwas vereinfacht:
<?
mysql_connect("localhost", "", "") or die("Can't Connect to Database: ".mysql_error());
mysql_select_db("partner (Datum,Nr,Sts,SubID,Prg,LS,Netto,ProvWert,Prov)");
$sql = "LOAD DATA INFILE 'c:/xampp/htdocs/test/beispiel.csv'
REPLACE INTO TABLE partner(Datum,Nr,Sts,SubID,Prg,LS,Netto,ProvWert,Prov)
FIELDS TERMINATED BY ';'
IGNORE 1 LINES";
if (mysql_query ($sql))
{
echo "Übertragung erfolgreich";
}
else
{
echo "Übertragung fehlgeschlagen. Grund: ". mysql_error ();
}
exit();
?>
meine Fehlermeldung lautet nun:
Übertragung fehlgeschlagen. Grund: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS TERMINATED BY ';' IGNORE 1 LINES' at line 3
ich hab als letztes die hochkommas in der Zeile davor weggenommen, die gleiche Fehlermeldung wie oben nur mit der Ausnahme, dass die Zeile vorher als mGrund angegeben worden ist
In Verzweiflung
Stoner
nu hab ich es so gemacht:
<?php
$db_Hostname = "localhost";
$db_UserName = "";
$db_Password = "";
$db_Database = "abrechnung";
$db_Table = "partner";
$db_Fields = "Datum, V_Anz, V_Prov, C_Anz, C_Prov, L_Anz, L_Prov, S_Anz, S_Prov, SubID, Prov";
$db_File = "c:/xampp/htdocs/test/zanox.csv";
$db_Terminated = "';'";
$select_db = 0;
if (isset ($select_db))
{
mysql_connect($db_Hostname, $db_UserName, $db_Password) || die("Can't Connect to Database: ".mysql_error());
mysql_select_db($db_Database);
$sql = "LOAD DATA INFILE '$db_File' INTO TABLE $db_Table FIELDS TERMINATED BY ';' IGNORE 1 LINES($db_Fields)";
if (mysql_query ($sql))
{
echo "Übertragung erfolgreich";
}
else
{
echo "Übertragung fehlgeschlagen. Grund: ". mysql_error ();
}
}
exit();
?>
und bekomme folgende Meldung:
Übertragung fehlgeschlagen. Grund: Duplicate entry '0' for key 1
in der Tabelle ist ein Datensatz eingetragen, aber auch nicht ganz richtig
Was muss ich denn nu machen?
Gruß Stoner
und bekomme folgende Meldung:
Übertragung fehlgeschlagen. Grund: Duplicate entry '0' for key 1
in der Tabelle ist ein Datensatz eingetragen, aber auch nicht ganz richtig
Was muss ich denn nu machen?
Gruß Stoner
du mußt imho das REPLACE | INGNORE setzen, das ist fürs überschreiben/ignoriren von datensätzen mit gleichen primärschlüsseln verantwortlich .... so erinnern ich mich zumindest, es gestern gelsen zu haben ...
versuch doch deine query erst mal in php_myadmin zum laufen zu kriegen ...
thx für alle Tips
es läuft und nun habe ich URLAUB!!!
Schönes Weihnachtsfest
Stoner
|
|