Autor | Zpráva | ||
---|---|---|---|
igid26 Profil |
#1 · Zasláno: 10. 1. 2022, 09:08:06
Zdravím,
potreboval by som poradiť. Cez woocommerce eshop potrebujem zobrazovať položky objednávky samostatne a nie ako celú objednávku. Využil som na to nižšie uvedený kód. Dáta sa však načítavajú veľmi pomaly. Je možno to nejakým spôsobom prerobiť? SELECT * FROM ( SELECT ID AS order_id, post_date, post_status FROM wp_posts WHERE post_type = 'shop_order' ) AS orders LEFT JOIN ( SELECT post_id AS order_id, MAX(CASE WHEN meta_key = '_billing_first_name' THEN meta_value END) AS _billing_first_name, MAX(CASE WHEN meta_key = '_billing_last_name' THEN meta_value END) AS _billing_last_name, MAX(CASE WHEN meta_key = '_billing_company' THEN meta_value END) AS _billing_company, MAX(CASE WHEN meta_key = '_billing_address_1' THEN meta_value END) AS _billing_address_1, MAX(CASE WHEN meta_key = '_billing_address_2' THEN meta_value END) AS _billing_address_2, MAX(CASE WHEN meta_key = '_billing_city' THEN meta_value END) AS _billing_city, MAX(CASE WHEN meta_key = '_billing_state' THEN meta_value END) AS _billing_state, MAX(CASE WHEN meta_key = '_billing_postcode' THEN meta_value END) AS _billing_postcode, MAX(CASE WHEN meta_key = '_billing_phone' THEN meta_value END) AS _billing_phone, MAX(CASE WHEN meta_key = '_billing_email' THEN meta_value END) AS _billing_email, MAX(CASE WHEN meta_key = '_billing_country' THEN meta_value END) AS _billing_country, MAX(CASE WHEN meta_key = '_order_total' THEN meta_value END) AS order_total, MAX(CASE WHEN meta_key = '_order_tax' THEN meta_value END) AS order_tax, MAX(CASE WHEN meta_key = 'Časopis' THEN meta_value END) AS Časopis, MAX(CASE WHEN meta_key = 'mailchimp_woocommerce_is_subscribed' THEN meta_value END) AS odber, MAX(CASE WHEN meta_key = '_paid_date' THEN meta_value END) AS paid_date FROM wp_postmeta GROUP BY post_id ) AS order_details ON orders.order_id = order_details.order_id LEFT JOIN ( SELECT order_id, GROUP_CONCAT(order_item_name SEPARATOR ', ') AS order_item_names, GROUP_CONCAT(order_items.order_item_id SEPARATOR ', ') AS order_item_ids, GROUP_CONCAT(order_item_type SEPARATOR ', ') AS order_item_types, GROUP_CONCAT(productID SEPARATOR ', ') AS productIDs, -- asi je stejné jako order_item_ids, ale v query to máš, tak jsem to nechal i tady GROUP_CONCAT(Qty SEPARATOR ', ') AS Qty, SUM(lineTotal) AS lineTotal, SUM(subtotal) AS subtotal FROM wp_woocommerce_order_items AS order_items LEFT JOIN ( SELECT order_item_id, MAX(CASE WHEN meta_key = '_product_id' THEN meta_value END) AS productID, MAX(CASE WHEN meta_key = '_qty' THEN meta_value END) AS Qty, MAX(CASE WHEN meta_key = '_line_total' THEN meta_value END) AS lineTotal, MAX(CASE WHEN meta_key = '_line_subtotal' THEN meta_value END) AS subtotal FROM wp_woocommerce_order_itemmeta GROUP BY order_item_id ) AS order_items_details ON order_items.order_item_id = order_items_details.order_item_id WHERE order_item_type = 'line_item' GROUP BY order_id ) AS order_items_sumary ON orders.order_id = order_items_sumary.order_id ORDER BY `post_date` DESC |
||
Kajman Profil |
#2 · Zasláno: 10. 1. 2022, 09:53:30
Tipnul bych, že bude rychlejší rozdělení dotazu na jednotlivé části. Vybrání objednávek a k nim detaily. Bude to více programování v php, ale v dotazech se vyhnete počítání max(case a group_concat i pro položky, které vlastně nechcete.
Viz "Konstantní počet dotazů" na Srovnání dotazů do závislých tabulek |
||
Časová prodleva: 2 roky
|
0