Не показывать полную строку, если в запросе нет определенного значения

0

Я хочу, чтобы не показывать целую строку, если "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; 
  • 0
    Я думаю, что вы хотите having пункт.
  • 0
    Это помогает понять, если вы всегда квалифицируете все столбцы, включая те, которые указаны в предложении WHERE
Теги:
mysqli

1 ответ

0
Лучший ответ

Вы используете предложение 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'
  • 0
    Это вызывает ошибку в GROUP BY p.ID и не работает. Почему это?
  • 0
    Возможно, пункт HAVING должен появиться ПОСЛЕ GROUP BY . Я обновил ответ. Дайте мне знать, если это не поможет.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню