SQL内部查询WHERE子句访问外部查询表

时间:2017-03-02 18:18:10

标签: mysql wordpress woocommerce

早上好 -

这是我在这里的第一篇文章,经过多年使用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 - 未知栏' wp_ot6q6i_posts.ID'在' where子句'

1 个答案:

答案 0 :(得分:0)

感谢大家的帮助。我最终朝不同的方向去解决这个问题,一个我更喜欢作为开发人员...我从最后一个连接中拉出固定的项目列表并在具有一系列的一系列代码中构建查询在where子句中进行更简单的查询,从而避免了整个Exists方法。

再次感谢您的帮助。