2017-03-02 1 views
0

안녕하세요 -SQL 내부 쿼리 외부 쿼리 테이블에 대한 WHERE 절 액세스

이것은 매우 유용한 리소스로 오랫동안 사용해온 첫 번째 게시물입니다.

복잡한 (나에게) 쿼리와 관련된 문제가 발생했습니다. 주문을 처리하기 위해 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'당신의 도움. 나는이 문제를 해결하기 위해 다른 방향으로가는 것을 끝내었다. 하나는 dev에 익숙하다. 마지막 조인에서 고정 된 항목 목록을 가져오고 일련의 코드가있는 쿼리를 작성한다. where 절에서 더 간단한 쿼리를 사용하므로 Exists 접근 방식 전체를 피할 수 있습니다.

다시 도움 주셔서 감사합니다.