2017-03-02 101 views
0

早上好 -SQL內部查詢WHERE子句訪問外部查詢表

這是我第一篇文章,經過多年使用SO作爲一個非常有用的資源。

我遇到了一個複雜的問題(對我來說)查詢我拉着一起運行woocommerce來處理訂單的wordpress網站。我正在嘗試將過濾器添加到訂單列表中,以過濾包含特定產品類別中的產品的訂單。

恐怕我已經把這個查詢加入了我的頭腦,這個查詢在內部查詢中加入了各種元表,以便獲得我需要的信息以確定產品的類別。

問題是,我無法使範圍規則工作以訪問內部查詢中所需的外部表信息。

查詢是:

SELECT SQL_CALC_FOUND_ROWS 
     wp_ot6q6i_posts.ID 
    FROM 
     wp_ot6q6i_posts 
    WHERE 
     1 = 1 AND YEAR(wp_ot6q6i_posts.post_date) = 2015 AND MONTH(wp_ot6q6i_posts.post_date) = 12 AND wp_ot6q6i_posts.post_type = 'shop_order' AND(
      (
       wp_ot6q6i_posts.post_status = 'wc-pending' OR wp_ot6q6i_posts.post_status = 'wc-processing' OR wp_ot6q6i_posts.post_status = 'wc-on-hold' OR wp_ot6q6i_posts.post_status = 'wc-completed' OR wp_ot6q6i_posts.post_status = 'wc-cancelled' OR wp_ot6q6i_posts.post_status = 'wc-refunded' OR wp_ot6q6i_posts.post_status = 'wc-failed' 
      ) 
     ) AND EXISTS(
     SELECT 
      t2.PROD_ID 
     FROM 
      (
      SELECT 
       wp_ot6q6i_woocommerce_order_itemmeta.meta_value AS PROD_ID 
      FROM 
       wp_ot6q6i_woocommerce_order_items 
      LEFT JOIN 
       wp_ot6q6i_woocommerce_order_itemmeta 
      ON 
       wp_ot6q6i_woocommerce_order_itemmeta.order_item_id = wp_ot6q6i_woocommerce_order_items.order_item_id 
      WHERE 
       wp_ot6q6i_woocommerce_order_items.order_item_type = 'line_item' AND wp_ot6q6i_woocommerce_order_itemmeta.meta_key = '_product_id' AND wp_ot6q6i_posts.ID = wp_ot6q6i_woocommerce_order_items.order_id 
     ) t1 
    INNER JOIN 
     (
     SELECT DISTINCT 
      wposts.ID AS PROD_ID 
     FROM 
      wp_ot6q6i_posts wposts 
     LEFT JOIN 
      wp_ot6q6i_postmeta wpostmeta 
     ON 
      wposts.ID = wpostmeta.post_id 
     LEFT JOIN 
      wp_ot6q6i_term_relationships 
     ON 
      (
       wposts.ID = wp_ot6q6i_term_relationships.object_id 
      ) 
     LEFT JOIN 
      wp_ot6q6i_term_taxonomy 
     ON 
      (
       wp_ot6q6i_term_relationships.term_taxonomy_id = wp_ot6q6i_term_taxonomy.term_taxonomy_id 
      ) 
     WHERE 
      wp_ot6q6i_term_taxonomy.taxonomy = 'product_cat' AND wp_ot6q6i_term_taxonomy.term_id IN(
      SELECT 
       term_id 
      FROM 
       `wp_ot6q6i_terms` 
      WHERE 
       slug = 'preorder' 
     ) 
    ORDER BY 
     wpostmeta.meta_value 
    ) t2 
    ON 
     t1.PROD_ID = t2.PROD_ID 
    ) 
    ORDER BY 
     wp_ot6q6i_posts.post_date 
    DESC 
    LIMIT 0, 20 

而我得到的錯誤是:

1054 - 未知列在 'where子句'

+0

請問wp_ot6q6i_posts的表格模式? – GurV

+0

@DaniloBustos - 感謝您的幫助。在定義wposts之前,錯誤實際上來自之前的'SELECT' ...只是爲了清楚,WHERE需要在最外層的wp_ot6q6i_posts.ID上進行過濾 - 這與訂單號相對應。 –

+0

@GurV - https://codex.wordpress.org/Database_Description#Table:_wp_posts –

回答

0

感謝所有爲 'wp_ot6q6i_posts.ID' 你幫幫我。我最終以一個不同的方向去解決這個問題,我更喜歡作爲一個開發人員......我從最後一次加入中拉出項目的固定列表,並在代碼中構建一個查詢,其中包含一系列where子句中更簡單的查詢,從而避免了整個Exists方法。

再次感謝您的幫助。