Я хочу, чтобы не показывать целую строку, если "payment_method", который я показываю, не имеет значение "x". Как я могу обновить свой код, чтобы сделать это?
SELECT
p.ID AS order_id,
max( CASE WHEN pm.meta_key = '_customer_user' AND p.ID = pm.post_id THEN pm.meta_value END ) AS user_ID,
max( CASE WHEN pm.meta_key = '_order_total' AND p.ID = pm.post_id THEN pm.meta_value END ) AS order_total,
max( CASE WHEN pm.meta_key = '_payment_method' AND p.ID = pm.post_id THEN pm.meta_value END ) AS payment_method
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id
LEFT JOIN wp_woocommerce_order_items oi ON p.ID = oi.order_id
WHERE post_type = 'shop_order' and post_status = 'wc-completed'
GROUP BY p.ID;
Вы используете предложение HAVING
. Подобно WHERE
, которое фильтрует ваш набор записей перед агрегацией (а часто и до объединения), предложение HAVING
фильтрует результирующий набор после агрегации. Это один из последних шагов для запуска в вашем SQL:
SELECT
p.ID AS order_id,
max( CASE WHEN pm.meta_key = '_customer_user' AND p.ID = pm.post_id THEN pm.meta_value END ) AS user_ID,
max( CASE WHEN pm.meta_key = '_order_total' AND p.ID = pm.post_id THEN pm.meta_value END ) AS order_total,
max( CASE WHEN pm.meta_key = '_payment_method' AND p.ID = pm.post_id THEN pm.meta_value END ) AS payment_method
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id
LEFT JOIN wp_woocommerce_order_items oi ON p.ID = oi.order_id
WHERE post_type = 'shop_order' and post_status = 'wc-completed'
GROUP BY p.ID
HAVING payment_method <> 'X'
HAVING
должен появиться ПОСЛЕ GROUP BY
. Я обновил ответ. Дайте мне знать, если это не поможет.
having
пункт.