Я помню, что был там.Вы не хотите знать неумелое, запутанное решение, которое я придумал.
Вы просто ищете пару парен и AND
с NOT
.
SELECT * FROM wp_posts, wp_postmeta
WHERE wp_posts.ID = wp_postmeta.post_id
-- parens make sure everything is grouped correctly and you don't have "and
-- meta_key - Ongoing and meta_value > NOW()
(wp_postmeta.meta_key = 'Start Date'
AND wp_postmeta.meta_value > NOW())
-- these conditions are all mutually exclusive, so they could never
-- simultaneously exist.
AND NOT
(wp_postmeta.meta_key = 'Ongoing'
AND wp_postmeta.meta_value != 'Yes')
Если вы хотите объединить результаты , у вас есть возможность использовать OR
.Просто замените AND NOT
на OR
и посмотрите, что произойдет.
Вы также можете использовать UNION
(хотя это почти никогда не делается, когда OR
является опцией (кажется, я помню, чтоТам могут быть небольшие различия в производительности, но беспокоиться об этом часто преждевременной оптимизации)):
SELECT * FROM wp_posts, wp_postmeta
WHERE wp_posts.ID = wp_postmeta.post_id
wp_postmeta.meta_key = 'Start Date'
AND wp_postmeta.meta_value > NOW()
-- Distinct vs. ALL is not really relevant here because you can't have overlap
UNION DISTINCT
SELECT * FROM wp_posts, wp_postmeta
WHERE wp_posts.ID = wp_postmeta.post_id
wp_postmeta.meta_key = 'Ongoing'
AND wp_postmeta.meta_value != 'Yes'