CSV DAtei formatieren

  • #1
R

Roxxinger

Mitglied
Themenersteller
Dabei seit
01.08.2005
Beiträge
6
Reaktionspunkte
0
Guten Morgen,

ich sitze derzeit vor dem Problem eine CSV Datei nach meinen Wünschen anlegen zu lassen.
Code:
Select distinct
spalten.aus.tabellen
INTO OUTFILE->datei.csv'
FIELDS
      TERMINATED BY->|'
      OPTIONALLY ENCLOSED BY->'
From
tabellen
Where
order_status =->P' and username=$name
Order By
mos_pshop_order_user_info.order_id Asc

Dies ist derzeit mein Code um die Datei zu erzeugen. klappt auch wunderbar :) nur möchte ich jetzt das die CSV.Datei folgendermassen aussieht:
1. Zeile: A|dann alle Spalten die Informationen zum Kunden beinhalten, Adresse, Tel. usw.
2.-xte Zeile: B|dann alle Spalten die Informationen zur Bestellung für den/die Artikel des Kunden enthalten.

mit meinem derzeitigem Code würde alles hintereinanderweg geschrieben jenachdem wie ich die Spalten einlese.

Geht so was? Wenn ja wie? :D

Gruß Jan
 
  • #2
Roxxinger schrieb:
Geht so was? Wenn ja wie? :D

Nein ;)

JEDE Zeile besitzt in einer *.csv die gleiche Struktur die in der 1. Zeile definiert werden kann.

Mit PHP und XML null Problemo, aber so wie du dir das denkst gehts nich ;)

AFAIK ;D ;D
 
  • #3
hmm das wär schlecht... :'(
 
  • #4
also irgendwie muss das gehen:

Code:
/
header(Content-Type: text/plain);
header(Content-Disposition: attachment; filename=.$datei..csv);


$result = mysql_query(Select distinct
mos_pshop_order_user_info.last_name,
mos_pshop_order_user_info.first_name,
mos_pshop_order_user_info.phone_1,
mos_pshop_order_user_info.fax,
mos_pshop_order_user_info.address_1,
mos_pshop_order_user_info.city,
mos_pshop_order_user_info.state,
mos_pshop_order_user_info.country,
mos_pshop_order_user_info.zip,
mos_pshop_order_user_info.user_email,
mos_pshop_orders.order_id,
mos_pshop_orders.order_total,
mos_pshop_orders.order_status,
mos_pshop_orders.order_currency,
mos_pshop_order_item.product_id,
mos_pshop_order_item.product_quantity,
mos_pshop_order_item.order_item_sku,
mos_pshop_order_item.order_item_name,
mos_pshop_order_item.product_item_price,
mos_pshop_order_item.product_final_price,
mos_users.username
From
mos_pshop_order_user_info
Inner Join mos_pshop_orders ON mos_pshop_orders.order_id = mos_pshop_order_user_info.order_id
Inner Join mos_pshop_order_status ON mos_pshop_orders.vendor_id = mos_pshop_order_status.vendor_id
Inner Join mos_pshop_order_item ON mos_pshop_orders.order_id = mos_pshop_order_item.order_id
Inner Join mos_users ON mos_pshop_order_user_info.user_id = mos_users.id
Where
mos_pshop_orders.order_status =->C' and mos_users.username=$name
Order By
mos_pshop_order_user_info.order_id Asc);
if ($data = mysql_fetch_array($result)){
$datei.=A|;$data[last_name];$data[first_name];$data[address_1];$data[zip];$data[city];$data[phone_1];$data[fax]\n;
}
while ($data = mysql_fetch_array($result)){
$datei.=B|;$data[order_id];$data[order_total];$data[order_item_name]\n;
}

print $datei;

so ähnlich, nur gibt er mir da immer den kompletten quellcode der website und mitten drin die $datei auflistung ...
und es sollte automatisch die datei auf dem server gespeichert werden und nicht als download
 
  • #5
OK, da ich das selbst im Moment nicht nachvollziehen kann, mach ichs mal aus dem Stegreif ;) ;D

1. Das header-Geraffel kann weg ;)
2. Das Schreiben der *.csv machst du so:
Code:
<?php
.....
.....
$fh = fopen(test.csv, w);
if ($data = mysql_fetch_array($result)){
  fwrite($fh,A|;$data[last_name];$data[first_name];$data[address_1];$data[zip];$data[city];$data[phone_1];$data[fax]\n);
}
while ($data = mysql_fetch_array($result)){
  fwrite($fh, B|;$data[order_id];$data[order_total];$data[order_item_name]\n);
}
fclose($fh);
?>

Nun solltest du deine Daten in der Datei haben, vorausgesetzt deine Abfrage funktioniert ;)

Was du nun mit dieser Datei anstellst, is deine Sache ;)
Wie ich in meinem 1. Posting schon erwähnte, bezweifle ich das diese Datei von z.B. Excel gelesen werden kann, da sie für eine *.csv eine falsche Syntax besitzt ;)
 
  • #6
das mit excel ist erstmal egal :D

dank dir schonmal für deine hilfe. kommst schon fast hin nur sieht die csv datei nun so aus:
Code:
A|test|test|test|23412|test|123124|
A|test|test|test|23412|test|123124|
B|20|71.00|AGW.001
A|test|test|test|23412|test|123124|
B|20|71.00|AGW.001
B|21|11.00|AGW.009
A|test|test|test|23412|test|123124|
B|20|71.00|AGW.001
B|21|11.00|AGW.009
B|22|0.00|HFS.001
A|test|test|test|23412|test|123124|
B|20|71.00|AGW.001
B|21|11.00|AGW.009
B|22|0.00|HFS.001
B|23|496.00|EWA02.012

sprich er macht die zeile A immer wenn bei B ne neue zeile hinzukommt...

Code:
$fh = fopen(test, w);
$result = mysql_query(Select distinct...);
if ($data = mysql_fetch_array($result)){
fwrite($fh,$datei.=A|$data[last_name]|$data[first_name]|$data[address_1]|$data[zip]|$data[city]|$data[phone_1]|$data[fax]\n);
}
$result = mysql_query(Select distinct...);
while ($data = mysql_fetch_array($result)){
  fwrite($fh, $datei.=B|$data[order_id]|$data[order_total]|$data[order_item_name]\n);
}
fclose($fh);

so sieht meine code aus, hoffe ich hatte dich richtig verstanden das es so muss;)
 
  • #7
Sorry, die Abfrage hab ich nicht kontrolliert, mach ich nacher, muss gschwind ne Stunde weg ;)
 
  • #8
Code:
<?php
$sql = Select distinct
			t1.last_name, t1.first_name, t1.phone_1, t1.fax, t1.address_1, 
			t1.city, t1.state, t1.country, t1.zip, t1.user_email, 
			t2.order_id, t2.order_total, t2.order_status, t2.order_currency, 
			t3.product_id, t3.product_quantity, t3.order_item_sku, t3.order_item_name, 
			t3.product_item_price, t3.product_final_price, 
			t5.username 
		From 
			mos_pshop_order_user_info t1 
		Inner Join 
			mos_pshop_orders t2 ON t2.order_id = t1.order_id
		Inner Join 
			mos_pshop_order_status t4 ON t2.vendor_id = t4.vendor_id 
		Inner Join 
			mos_pshop_order_item t3 ON t2.order_id = t3.order_id 
		Inner Join mos_users t5 ON t1.user_id = t5.id 
		Where
			t2.order_status =->C' and t5.username='.$name.' 
		Order By
			t1.order_id ASC;

$fh = fopen(test.csv, w);

if ($res = mysql_query($sql)){
	$i = 0;
	while ($data = mysql_fetch_array($res)){
		if($i==0) fwrite($fh, A|;$data[last_name];$data[first_name];$data[address_1];
                         $data[zip];$data[city];$data[phone_1];$data[fax]\n);
		fwrite($fh, B|;$data[order_id];$data[order_total];$data[order_item_name]\n);
		++$i;
	}
}
fclose($fh);
?>

edit:
im 1. Bsp. hatte ich das => $datei .= <= übersehen, dann hätte das auch geklappt ;)
 
  • #9
guten morgen :D

danke dir für deine hilfe, hab jetzt das erste beispiel ohne $datei gemacht und es funzt. beim 2ten beispiel ist die test.csv leider irgendwie immer leer :( habs auch schon versucht anzupassen aber hat nicht hingehaun

Code:
mysql_fetch_array($result)
müßte glaub ich
Code:
mysql_fetch_array($sql)
sein

aber hat nichts geholfen

gruß jan
 
  • #10
Ups, muss $res heißen ;D ;D
 
  • #11
jep funzt danke dir vielmals 8)
 
Thema:

CSV DAtei formatieren

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben