Export von Kundendaten (mail, sprache)

MyOOS hat einen Fehler, oder tut nicht das, was Ihr erwartet? Derartige "Unanehmlichkeiten" bitte hier.
Antworten
päde
Beiträge: 30
Registriert: 24.09.2008, 15:11
Kontaktdaten:

Export von Kundendaten (mail, sprache)

Beitrag von päde »

Hallo zusammen

Ich möchte gerne eine allgemeine Mail an alle bestehenden Kunden versenden, unabhängig davon ob diese nun Newsletter wünschen oder nicht.
Das Problem besteht darin, dass ich die Sprache des Kunden in der Tabelle Customer nicht ausfindig machen kann, wenn kein Newsletter abonniert wurde (mail_language_id=0). Somit bin ich auf die Idee gestossen, dass ich diese Informationen aus der Tabelle orders (orders_language) ziehen könnte.

Verschiedenste Versuche sind jedoch leider gescheitert....
Irgendwie ist der SQL-String falsch aufgesetzt (hab's auch schon mit LEFT JOIN versucht). Das Problem ist ja, dass ich irgendwie auch die Kunden haben möchte, die noch keine Bestellung gemacht haben (dann halt ohne Spracherkennung).

Ansatz 1:

Code: Alles auswählen

 $db =& oosDBGetConn(); 
$db2 =& oosDBGetConn(); 
oosSetTimeLimit(0); 
$output = 'gender;lastname;firstname;email_address;language' . "\n"; 
$sql = "SELECT customers_id, customers_gender, customers_firstname, customers_lastname, customers_email_address, mail_languages_id 
FROM " . $oosDBTable['customers] . " 
ORDER BY customers_lastname ASC"; 
$sql = "SELECT 
c.customers_id, c.customers_gender, c.customers_firstname, c.customers_lastname, c.customers_email_address, c.mail_languages_id, o.orders_language 
FROM 
orders o, 
customers c 
WHERE 
c.customers_id = o.customers_id 
ORDER BY 
c.customers_id ASC"; 
$customers_result = $db->Execute($sql); 
while ($customers = $customers_result->fields) { 
if ($customers['customers_id] != $temp_cid) { 
$temp_cid = $customers['customers_id]; 
$output .= $customers['customers_gender] . ';' . $customers['customers_lastname] . ';' . $customers['customers_firstname] . ';' . $customers['customers_email_address] . ';'; 
switch ($customers['mail_languages_id]) { 
case '1': 
$output .= 'de' . "\n"; 
$customers_result->MoveNext(); 
break; 
case '2': 
$output .= 'en' . "\n"; 
$customers_result->MoveNext(); 
break; 
case '7': 
$output .= 'fr' . "\n"; 
$customers_result->MoveNext(); 
break; 
default: 
$sql2 = "SELECT orders_language 
FROM " . $oosDBTable['orders] . " 
WHERE customers_id='" . intval($customers['customers_id]) . "'"; 
$orders_result = $db2->Execute($sql2); 
$orders = $orders_result->fields; 
while ($customers['customers_id] == $temp_cid) { 
if ($customers['mail_languages_id] == '') { 
$customers_result->MoveNext(); 
} 
} 

$output .= intval($customers['customers_id]); 
break; 
} 
$output .= "\n"; 
} 
} 
$export_file = OOS_ADMIN_PATH . 'backups/export_customerlist.csv'; 
if ($fp = fopen($export_file, 'w')) { 
fputs($fp, $output); 
fclose($fp); 
} 


Ansatz 2:

Code: Alles auswählen

$sql = "SELECT 
c.customers_id, c.customers_gender, c.customers_firstname, c.customers_lastname, c.customers_email_address, c.mail_languages_id, o.orders_language 
FROM 
orders o, 
customers c 
WHERE 
c.customers_id = o.customers_id 
ORDER BY 
c.customers_id ASC"; 
$customers_result = $db->Execute($sql); 
while ($customers = $customers_result->fields) { 
if ($customers['customers_id] != $temp_cid) { 
$temp_cid = $customers['customers_id]; 
$output .= $customers['customers_gender] . ';' . $customers['customers_lastname] . ';' . $customers['customers_firstname] . ';' . $customers['customers_email_address] . ';'; 
switch ($customers['mail_languages_id]) { 
case '1': 
$output .= 'de' . "\n"; 
break; 
case '2': 
$output .= 'en' . "\n"; 
break; 
case '7': 
$output .= 'fr' . "\n"; 
break; 
default: 
$output .= $orders['orders_language]; 
} 
$customers_result->MoveNext(); 
} 


Irgendwie komme ich einfach nicht weiter....
Weiss hier jemand Rat?

Gruss
Päde
r23
Beiträge: 2674
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Beitrag von r23 »

Hallo,

[quote='päde','index.php?page=Thread&postID=2259#post2259]Ich möchte gerne eine allgemeine Mail an alle bestehenden Kunden versenden, unabhängig davon ob diese nun Newsletter wünschen oder nicht.
Das Problem besteht darin, dass ich die Sprache des Kunden in der Tabelle Customer nicht ausfindig machen kann, wenn kein Newsletter abonniert wurde (mail_language_id=0). Somit bin ich auf die Idee gestossen, dass ich diese Informationen aus der Tabelle orders (orders_language) ziehen könnte.[/quote]

[quote='päde','index.php?page=Thread&postID=2259#post2259]PHP-Quelltext
[quote='päde','index.php?page=Thread&postID=2259#post2259]
$db =& oosDBGetConn();
$db2 =& oosDBGetConn();
[/quote]
[/quote]

Verwende nur eine Verbindung zur Datenbank

Code: Alles auswählen

$db = oosDBGetConn();

[quote='päde','index.php?page=Thread&postID=2259#post2259]
oosSetTimeLimit(0);
$output = 'gender;lastname;firstname;email_address;language' . "\n";
$sql = "SELECT customers_id, customers_gender, customers_firstname, customers_lastname, customers_email_address, mail_languages_id
FROM " . $oosDBTable['customers] . "
ORDER BY customers_lastname ASC";
$sql = "SELECT
[/quote]

Hier wird der erste Inhalt von $sql überschreiben.

[quote='päde','index.php?page=Thread&postID=2259#post2259]
$sql = "SELECT
c.customers_id, c.customers_gender, c.customers_firstname, c.customers_lastname, c.customers_email_address, c.mail_languages_id, o.orders_language
FROM
orders o,
customers c
WHERE
c.customers_id = o.customers_id
ORDER BY
c.customers_id ASC";
[/quote]

Das Projekt verwendet aus Sicherheitsgründen eine festen DB-Tabellen-Namen
FROM
orders o,
customers c

Verwende hier die vom System verwendete Syntax.


[quote='päde','index.php?page=Thread&postID=2259#post2259]
$customers_result = $db->Execute($sql);
while ($customers = $customers_result->fields) {
if ($customers['customers_id] != $temp_cid) {
$temp_cid = $customers['customers_id];
[/quote]

Was soll dies mit der $temp_cid?

[quote='päde','index.php?page=Thread&postID=2259#post2259]
$output .= $customers['customers_gender] . ';' . $customers['customers_lastname] . ';' . $customers['customers_firstname] . ';' . $customers['customers_email_address] . ';';
switch ($customers['mail_languages_id]) {
case '1':
$output .= 'de' . "\n";
$customers_result->MoveNext();
break;
case '2':
$output .= 'en' . "\n";
$customers_result->MoveNext();
break;
case '7':
$output .= 'fr' . "\n";
$customers_result->MoveNext();
break;
[/quote]

hier hat $customers_result->MoveNext(); nichts verloren.

[quote='päde','index.php?page=Thread&postID=2259#post2259]
default:
$sql2 = "SELECT orders_language
FROM " . $oosDBTable['orders] . "
WHERE customers_id='" . intval($customers['customers_id]) . "'";
$orders_result = $db2->Execute($sql2);
[/quote]

verwende nur eine Verbindung zur Datenbank
$orders_result = $db->Execute($sql2);
Wenn der Kunde mehr als eine Bestellung getätigt hat - wird das Ergebnis abenteuerlich.


[quote='päde','index.php?page=Thread&postID=2259#post2259]
$orders = $orders_result->fields;
while ($customers['customers_id] == $temp_cid) {
if ($customers['mail_languages_id] == '') {
$customers_result->MoveNext();
}
}[/quote]

Die while - Schleife wirst du in keinem der Projekt-Dateien so sehen - was möchtest du mit dieser == $temp_cid erreichen?

Code: Alles auswählen

if ($customers['mail_languages_id] == '') { 
$customers_result->MoveNext(); 
} 
Wie möchtest du die while Schleife beenden?

cu

ralf
Antworten