2016-04-10 3 views
2

bitte helfen Sie, dies zu vervollständigen. Ich brauche, um Bericht von WooCommerce im CSV-Format herunterladen, für die ich gemacht die folgende Abfrage:Sql Abfrage zum Download Bestellbericht in woocommerce

header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment; filename=data.csv'); 

// create a file pointer connected to the output stream 
$output = fopen('php://output', 'w'); 
fputcsv($output, array('ID', 'Date', 'Status','Name')); 
$rows = mysql_query('SELECT ID,post_date,post_status,post_name FROM wp_posts WHERE post_date LIKE "%2016-03-30%"'); 

while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row); 

Und das ist nur eine Spur und hier ich nur Daten aus dem Post-Tabelle holen.

Aber ich muss eine Verbindung zu postmeta und anderen Tabellen, so dass ich alle Informationen zur Bestellung erhalten kann.
Durch die Suche im Internet bekomme ich den folgenden Code, aber ich weiß nicht, wie ich dies mit meinem Code integrieren kann.
Siehe die Abfrage für alle Auftragsdetails zu erhalten:

select 
    p.ID as order_id, 
    p.post_date, 
    max(CASE WHEN pm.meta_key = '_billing_email' and p.ID = pm.post_id THEN pm.meta_value END) as billing_email, 
    max(CASE WHEN pm.meta_key = '_billing_first_name' and p.ID = pm.post_id THEN pm.meta_value END) as _billing_first_name, 
    max(CASE WHEN pm.meta_key = '_billing_last_name' and p.ID = pm.post_id THEN pm.meta_value END) as _billing_last_name, 
    max(CASE WHEN pm.meta_key = '_billing_address_1' and p.ID = pm.post_id THEN pm.meta_value END) as _billing_address_1, 
    max(CASE WHEN pm.meta_key = '_billing_address_2' and p.ID = pm.post_id THEN pm.meta_value END) as _billing_address_2, 
    max(CASE WHEN pm.meta_key = '_billing_city' and p.ID = pm.post_id THEN pm.meta_value END) as _billing_city, 
    max(CASE WHEN pm.meta_key = '_billing_state' and p.ID = pm.post_id THEN pm.meta_value END) as _billing_state, 
    max(CASE WHEN pm.meta_key = '_billing_postcode' and p.ID = pm.post_id THEN pm.meta_value END) as _billing_postcode, 
    max(CASE WHEN pm.meta_key = '_shipping_first_name' and p.ID = pm.post_id THEN pm.meta_value END) as _shipping_first_name, 
    max(CASE WHEN pm.meta_key = '_shipping_last_name' and p.ID = pm.post_id THEN pm.meta_value END) as _shipping_last_name, 
    max(CASE WHEN pm.meta_key = '_shipping_address_1' and p.ID = pm.post_id THEN pm.meta_value END) as _shipping_address_1, 
    max(CASE WHEN pm.meta_key = '_shipping_address_2' and p.ID = pm.post_id THEN pm.meta_value END) as _shipping_address_2, 
    max(CASE WHEN pm.meta_key = '_shipping_city' and p.ID = pm.post_id THEN pm.meta_value END) as _shipping_city, 
    max(CASE WHEN pm.meta_key = '_shipping_state' and p.ID = pm.post_id THEN pm.meta_value END) as _shipping_state, 
    max(CASE WHEN pm.meta_key = '_shipping_postcode' and p.ID = pm.post_id THEN pm.meta_value END) as _shipping_postcode, 
    max(CASE WHEN pm.meta_key = '_order_total' and p.ID = pm.post_id THEN pm.meta_value END) as order_total, 
    max(CASE WHEN pm.meta_key = '_order_tax' and p.ID = pm.post_id THEN pm.meta_value END) as order_tax, 
    max(CASE WHEN pm.meta_key = '_paid_date' and p.ID = pm.post_id THEN pm.meta_value END) as paid_date, 
    (select group_concat(order_item_name separator '|') from wp_woocommerce_order_items where order_id = p.ID) as order_items 
from 
    wp_posts as p, 
    wp_postmeta as pm 
where 
    post_type = 'shop_order' and 
    p.ID = pm.post_id and 
    post_date BETWEEN '2015-01-01' AND '2015-07-08' 
    and post_status = 'wc-completed' 
group by 
    p.ID 

Bitte helfen, dies zu vervollständigen, oder gibt es eher jede gute Methode als das?
Ich möchte keine Plugins verwenden.
Derzeit habe ich ein Plugin, aber das funktioniert langsam, deshalb mache ich diese Seite.

Bitte helfen Sie, dieses Problem zu lösen.

+1

Hey @Manik, können Sie mehr eine Beschreibung für den Teil zur Verfügung stellen, auf dem Sie feststecken? Glauben Sie nicht, dass eine vollständige Lösung für Ihr Problem in einem Post gelöst werden kann, aber vielleicht können Sie genau zeigen, wo die Trennung ist. Ich sehe, Sie haben eine SQL-Anweisung, gibt dies derzeit die richtigen Ergebnisse und Sie brauchen nur diese Aussage in einer benutzerdefinierten WordPress-Abfrage? – Xtremefaith

+0

Könnten Sie bitte die wp_query Daten holen und bitte sagen Sie mir, wie man den Download in CSV machen. Es wird mir wirklich helfen. – Manik

+0

Vielen Dank für die Antwort :). – Manik

Antwort

2

Von meinem eigenen blog post, ist dies das Format für das SQL, um Informationen aus einem EAV-Stil Tabellenlayout zu extrahieren.

$reportQuery = " 
SELECT 
    A.ID as order_id 
, B.meta_value as b_first_name 
, C.meta_value as b_last_name 
, D.meta_value as b_address_1 
, E.meta_value as b_address_2 
, F.meta_value as b_country 
, G.meta_value as b_state 
, H.meta_value as b_city 
, I.meta_value as b_postcode 
, J.meta_value as b_user_id 
, K.user_email as b_email 

FROM wp_posts as A 
LEFT JOIN wp_postmeta B 
    ON A.id = B.post_id AND B.meta_key = '_billing_first_name' 

LEFT JOIN wp_postmeta C 
    ON A.id = C.post_id AND C.meta_key = '_billing_last_name' 

LEFT JOIN wp_postmeta D 
    ON A.id = D.post_id AND D.meta_key = '_billing_address_1' 

LEFT JOIN wp_postmeta E 
    ON A.id = E.post_id AND E.meta_key = '_billing_address_2' 

LEFT JOIN wp_postmeta F 
    ON A.id = F.post_id AND F.meta_key = '_billing_country' 

LEFT JOIN wp_postmeta G 
    ON A.id = G.post_id AND G.meta_key = '_billing_state' 

LEFT JOIN wp_postmeta H 
    ON A.id = H.post_id AND H.meta_key = '_billing_city' 

LEFT JOIN wp_postmeta I 
    ON A.id = I.post_id AND I.meta_key = '_billing_postcode' 

LEFT JOIN wp_postmeta J 
    ON A.id = J.post_id AND J.meta_key = '_customer_user' 

LEFT JOIN wp_users K 
    ON J.meta_value = K.ID 

WHERE A.post_type = 'shop_order' 
AND A.post_status = 'wc-completed'; 
AND A.post_date_gmt >= DATE_SUB(NOW(), INTERVAL 1 DAY) 
"; 

header('Content-Type: text/csv; charset=utf-8'); 
header('Content-Disposition: attachment; filename=woocommerce-'.date('Y-m-d').'.csv'); 

// create a file pointer connected to the output stream 
$output = fopen('php://output', 'w'); 
$rows = mysql_query($reportQuery); 

while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row); 
fclose($output); 
+0

Entschuldigung für die späte Antwort. Danke :) – Manik

+0

könnten Sie bitte helfen, diese Frage zu lösen http://stackoverflow.com/questions/36526268/sql-query-to-download-order-report-in-woocommerce – Manik