我只想包括没有从当前站点购买任何东西的用户。我可以使用此查询来获取已购买的用户。但不知道如何做相反的事情。
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;
因为,您已经有查询来获取已购买的用户。
我们可以利用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%');