只包含没有在Woocommerce购买过的用户,SQL查询

问题描述 投票:0回答:1

我只想包括没有从当前站点购买任何东西的用户。我可以使用此查询来获取已购买的用户。但不知道如何做相反的事情。

SELECT *
FROM {prefix}posts AS posts 
INNER JOIN {prefix}woocommerce_order_items AS woocommerce_order_items ON posts.ID = woocommerce_order_items.order_id 
INNER JOIN {prefix}woocommerce_order_itemmeta AS woocommerce_order_itemmeta ON woocommerce_order_items.order_item_id = woocommerce_order_itemmeta.order_item_id 
INNER JOIN {prefix}postmeta AS postmeta ON posts.ID = postmeta.post_id 
INNER JOIN {prefix}users AS users ON postmeta.meta_value = users.ID 
LEFT JOIN {prefix}usermeta AS usermeta ON users.ID = usermeta.user_id 


WHERE usermeta.meta_value = '%current_user_meta|client-name%'
AND EXISTS (SELECT 1 FROM {prefix}usermeta WHERE user_id = users.ID AND meta_key = '{prefix}capabilities' AND meta_value LIKE '%subscriber%')
GROUP BY posts.ID;
sql wordpress woocommerce
1个回答
0
投票

因为,您已经有查询来获取已购买的用户。

我们可以利用left join排除这些记录,得到没有购买的用户列表

   SELECT users.*
    FROM {prefix}users AS users
    LEFT JOIN (
        SELECT DISTINCT postmeta.meta_value
        FROM {prefix}posts
        INNER JOIN {prefix}woocommerce_order_items ON posts.ID = woocommerce_order_items.order_id 
        INNER JOIN {prefix}woocommerce_order_itemmeta ON woocommerce_order_items.order_item_id = woocommerce_order_itemmeta.order_item_id 
        INNER JOIN {prefix}postmeta ON posts.ID = postmeta.post_id 
        WHERE postmeta.meta_key = '_customer_user'
    ) AS users_who_purchased ON users.ID = users_who_purchased.meta_value
    WHERE users_who_purchased.meta_value IS NULL
    AND EXISTS (SELECT 1 FROM {prefix}usermeta WHERE user_id = users.ID AND meta_key = '{prefix}capabilities' AND meta_value LIKE '%subscriber%');
© www.soinside.com 2019 - 2024. All rights reserved.