2017-02-17 15 views
-3
SELECT wp_terms.name AS 'Exam', 
     (SELECT wp_postmeta.meta_value 
     FROM wp_postmeta 
     WHERE wp_postmeta.meta_key in ('_order_total')), 
     wp.id, 
     wp_woocommerce_order_itemmeta.meta_value AS 'Product Id', 
     f.order_item_name, 
     (SELECT wp_postmeta.meta_value 
     FROM wp_postmeta 
     WHERE wp_postmeta.meta_key in ('_billing_email')) 
FROM wp_term_taxonomy 
    INNER JOIN wp_terms ON wp_terms.term_id = wp_term_taxonomy.term_id 
    INNER JOIN wp_term_relationships ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id 
    INNER JOIN wp_woocommerce_order_itemmeta ON wp_woocommerce_order_itemmeta.meta_value = wp_term_relationships.object_id 
    INNER JOIN (SELECT f.order_item_id, 
        f.order_id, 
        f.order_item_name 
       FROM wp_woocommerce_order_items f) f ON f.order_item_id = wp_woocommerce_order_itemmeta.order_item_id 
    INNER JOIN wp_postmeta ON wp_postmeta.post_id = f.order_id 
    INNER JOIN (SELECT wp.id, 
       FROM wp_posts wp 
       INNER JOIN wp_postmeta wm ON wp.id = wm.post_id 
       WHERE wp.post_type = 'shop_order' 
       AND wp.post_status = 'wc-completed' AND wm.meta_key = '_completed_date') wp ON wp.id = wp_postmeta.post_id 
WHERE wp_term_taxonomy.taxonomy = 'product_cat' 
AND wp_term_taxonomy.term_id IN (2825,2829,2833,2837,2844,2851,2847) 
AND wp_woocommerce_order_itemmeta.meta_key = '_product_id' 
AND wp_postmeta.meta_key IN ('_order_total','_billing_email') 

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

+0

- _billing_email и _order_total всего одна строка? или вы хотите объединить все эти строки как 1 значение для каждой выбранной записи? Возможно, вы можете сделать левое соединение wp_postmeta вместо того, чтобы помещать его в Select, для ex: SELECT ..., _billing_email, .... FROM .. ..... LEFT JOIN (SELECT STRING_aggregate_function (wp_postmeta.meta_value, ',') как _billing_email WHERE wp_postmeta.meta_key in ('_billing_email')) ON id = id .... –

+0

Спасибо за ответ, _billing_email и _order_total разные мета-ключи, имеющие разные мета-значения в одной таблице. Я хочу, чтобы оба значения мета в разных столбцах. –

+0

Oracle или mysql? – Aleksej

ответ

0

Как сказал vims, у вас есть несколько строк во 2 подзапросах из wp_postmeta. На самом деле вы не присоединиться к ним с помощью идентификатора или что-то подобное и в следующем выберите, например

SELECT wp_postmeta.meta_value 
    FROM wp_postmeta 
    WHERE wp_postmeta.meta_key in ('_order_total') 

возвращает все строки в БД с ключом = «_ order_total»

То же самое для

SELECT wp_postmeta.meta_value 
     FROM wp_postmeta 
     WHERE wp_postmeta.meta_key in ('_billing_email')) 

Итак, вы должны добавить предложение соединения на некоторый идентификатор к обоим из них. Прошу прощения, я не эксперт по WP и \ или WooCommerce, поэтому не могу дать вам подсказки о том, какое поле использовать.

Кроме того, вы должны поместить эти подзадачи в часть FROM и WHERE или ваш выбор. Подсекция в списке выбора не является хорошей практикой.

-1
SELECT 
    wp_terms.name AS 'Exam', 
    (
    SELECT wp_postmeta.meta_value 
    FROM wp_postmeta 
    WHERE wp_postmeta.meta_key in ('_order_total') and rownum=1 
    ), 
    wp.id, 
    wp_woocommerce_order_itemmeta.meta_value AS 'Product Id', 
    f.order_item_name, 
    (
    SELECT wp_postmeta.meta_value 
    FROM wp_postmeta 
    WHERE wp_postmeta.meta_key in ('_billing_email') and rownum=1 
    ) 
FROM 
    wp_term_taxonomy 
.... 
+0

Попробуйте добавить пояснительный текст, с чем была проблема, и что вы сделали для решения проблемы. – KarelG

+0

У MySQL нет 'rownum', только' LIMIT'. –

0

Подзапросы не ограничиваются указанным post_id. Следовательно, вы получаете order_totals для всех сообщений. Добавьте что-нибудь подобное в каждый подзапрос:

AND f.order_id = post_id