2016-08-03 4 views
0

Ich arbeite an der Erstellung einiger SQL-Ansichten für meine Wordpress-Datenbank, um Online-Bestellungen, die über das WooCommerce-Plugin generiert wurden, einfacher anzuzeigen. Ich bin vertraut mit der WooCommerce-Struktur und wo die Daten gespeichert sind, aber als SQL-Neuling stehe ich bei der letzten Hürde fest.SQL Abfrage zum Abrufen von WooCommerce-Bestellpositionen und Metadaten

Ich habe in der Lage, die erste Ansicht aller Auftragsdaten mit diesen Verweis zu erstellen:

http://codecharismatic.com/sql-script-to-get-all-woocommerce-orders-including-metadata/

Jetzt brauchen eine ähnliche Ansicht der Positionen für jeden dieser Aufträge erstellen ich. Es gibt zwei Tabellen, die Reihenfolge speichern Artikeldetails:

wp_woocommerce_order_items wp_woocommerce_order_itemmeta

Ich habe in der Lage, die grundlegende Liste der Datensätze aus der wp_woocommerce_order_items Tabelle zu erstellen, wie folgt:

SELECT order_item_id,order_item_name,order_item_type,order_id 
FROM ocm_woocommerce_order_items 
ORDER BY order_id 

Dies gibt ein schöne Liste der Datensätze wie folgt:

order_item_id order_item_name order_item_type order_id 
2 Widgets line_item 9 
3 Widgets line_item 10 
4 Widgets line_item 11 
5 Woo Logo line_item 473 
6 Woo Logo line_item 473 

Ich möchte jetzt hinzufügen, zusätzlich a Spalten für jede Werbebuchung aus der Tabelle wp_woocommerce_order_itemmeta. Diese Tabelle enthält mehrere Datensätze für jede Position wie folgt aus:

meta_id order_item_id meta_key meta_value 
136 16 _qty 4 
137 16 _tax_class 
138 16 _product_id 87 
139 16 _variation_id 0 
140 16 _line_subtotal 36 
141 16 _line_total 36 
142 16 _line_subtotal_tax 3.6 
143 16 _line_tax 3.6 

Ich möchte jedem von diesen in eine neue Spalte konvertieren, so würde meine Ausgabe bestehen aus:

order_item_id, order_item_name, order_item_type, order_id, qty, tax_class, product_id, variation_id, line_subtotal, line_total, line_subtotal_tax, line_tax 

Ich bin nicht sicher Welche SQL-Syntax soll ich hier verwenden? Ich habe versucht, eine ähnliche Syntax wie oben beschrieben zu verwenden, konnte sie aber bisher nicht ausführen und bin mir nicht sicher, ob das tatsächlich die richtige Syntax ist.

Antwort

5

Ich habe es geschafft, dies durch Versuch und Irrtum auszuarbeiten. Hier ist die Abfrage, die am Ende funktionierte:

select 
p.order_id, 
p.order_item_id, 
p.order_item_name, 
p.order_item_type, 
max(CASE WHEN pm.meta_key = '_product_id' and p.order_item_id = pm.order_item_id THEN pm.meta_value END) as productID, 
max(CASE WHEN pm.meta_key = '_qty' and p.order_item_id = pm.order_item_id THEN pm.meta_value END) as Qty, 
max(CASE WHEN pm.meta_key = '_variation_id' and p.order_item_id = pm.order_item_id THEN pm.meta_value END) as variationID, 
max(CASE WHEN pm.meta_key = '_line_total' and p.order_item_id = pm.order_item_id THEN pm.meta_value END) as lineTotal, 
max(CASE WHEN pm.meta_key = '_line_subtotal_tax' and p.order_item_id = pm.order_item_id THEN pm.meta_value END) as subTotalTax, 
max(CASE WHEN pm.meta_key = '_line_tax' and p.order_item_id = pm.order_item_id THEN pm.meta_value END) as Tax, 
max(CASE WHEN pm.meta_key = '_tax_class' and p.order_item_id = pm.order_item_id THEN pm.meta_value END) as taxClass, 
max(CASE WHEN pm.meta_key = '_line_subtotal' and p.order_item_id = pm.order_item_id THEN pm.meta_value END) as subtotal 
from 
ocm_woocommerce_order_items as p, 
ocm_woocommerce_order_itemmeta as pm 
where order_item_type = 'line_item' and 
p.order_item_id = pm.order_item_id 
group by 
p.order_item_id