2016-04-10 8 views
2

, пожалуйста, помогите заполнить это. Мне нужно, чтобы загрузить отчет заказа WooCommerce в формате CSV, для этого я сделал следующий запрос:Запрос Sql для загрузки отчета о заказе в 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); 

И это лишь след и здесь я только получать данные после таблицы.

Но мне нужно подключиться к postmeta и другим таблицам, чтобы я мог получить всю информацию о заказе.
При поиске в Интернете я получаю следующий код, но я не знаю, как интегрироваться с этим с моим кодом.
Смотрите запрос для, чтобы получить все детали заказа:

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 

Пожалуйста, помогите заполнить это, или есть хороший метод, а не это?
Я не хочу использовать плагины.
В настоящее время у меня есть плагин, но это работает медленно, поэтому я делаю эту страницу.

Пожалуйста, помогите решить эту проблему.

+1

Hey @Manik, можете ли вы предоставить более подробное описание части, на которой вы застряли? Не верьте, что полное решение проблемы может быть разрешено в одном сообщении, но, возможно, вы можете точно показать, где находится разъединение. Я вижу, что у вас есть инструкция SQL, в настоящее время она дает правильные результаты, и вам просто нужно это заявление в пользовательском запросе WordPress? – Xtremefaith

+0

Не могли бы вы дать wp_query для получения данных и, пожалуйста, скажите мне, как сделать загрузку в csv. Это действительно поможет мне. – Manik

+0

Спасибо за ответ :). – Manik

ответ

2

Из моего собственного blog post это формат для того, чтобы SQL извлекал информацию из макета таблицы стилей EAV.

$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

извините за поздний ответ. Спасибо :) – Manik

+0

не могли бы вы помочь решить этот вопрос http://stackoverflow.com/questions/36526268/sql-query-to-download-order-report-in-woocommerce – Manik