2017-02-17 4 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クエリのthrowsサブクエリは複数の行エラーを返します。請求先住所を列に、受注合計を別の列に欲しい。どうやってするか?sqlサブクエリは1行以上のエラーを返します

+0

は_billing_emailと_order_totalが1行だけですか?または選択したレコードごとに1つの値としてこれらの行をすべて結合したい場合は、wp_postmetaの左ジョイントをSelectに入れる代わりに (例: SELECT ...、_billing_email、FROM ..)にすることができます。 ( '_billing_email')内のwp_postmeta.meta_key)ON id = id .... –

+0

返信ありがとう、_billing_emailと_order_total(返信ありがとうございました。同じテーブルに異なるメタ値を持つ異なるメタキーである。私は両方のメタ値を別の列に入れたい。 –

+0

Oracleまたはmysql? – Aleksej

答えて

0

vimによると、wp_postmetaの2つの副選択の中に2つ以上の行があります。あなたが例えば

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

がキー=「_ ORDER_TOTAL」

同じことが成り立つとDB内のすべての行を返し、IDまたはその、次の選択のようなものでそれらを結合していない事実

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

したがって、いくつかのidには両方にjoin句を追加する必要があります。 私は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 
関連する問題