I am writing a pair of queries for a site with an events listing function. Events can be either on a single date or over several (multi-day). All events have a value in custom field `event_date`. Multi-day events also have an `end_date` value. Single day events should be in the 'upcoming events' list (first query) until the end of their `event_date`, and multi-day events should stay until the end of their `end_date`. Once they are no longer in the upcoming list they should move to the 'past events' list (new query, same page). The upcoming query works perfectly. Multi-day events stay in the list between their `event_date` and `end_date` values: ```php $now = date('Ymd', strtotime("now")); $future = date('Ymd', strtotime("+24 months")); $uc_args = array( 'post_type' => 'event', 'meta_query' => array( 'relation' => 'OR', // check post has end_date and it is between $now and $future array( 'key' => 'end_date', 'compare' => 'BETWEEN', 'type' => 'NUMERIC', 'value' => array($now, $future), ), // if no end date check event_date is between $now and $future array( 'key' => 'event_date', 'compare' => 'BETWEEN', 'type' => 'NUMERIC', 'value' => array($now, $future), ), ), 'meta_key' => 'event_date', 'orderby' => 'meta_value', 'order' => 'ASC', 'nopaging' => true, ); ``` The past query is constructed exactly the same way, but multi-day events are appearing once their `event–date` has passed, even if they have an `end_date` value: ```php $past = date('Ymd', strtotime("-999 months")); $now = date('Ymd', strtotime("now")); $uc_args = array( 'post_type' => 'event', 'meta_query' => array( 'relation' => 'OR', // check post has end_date and it is between $past and $now array( 'key' => 'end_date', 'compare' => 'BETWEEN', 'type' => 'NUMERIC', 'value' => array($past, $now), ), // if no end date check event_date is between $past and $now array( 'key' => 'event_date', 'compare' => 'BETWEEN', 'type' => 'NUMERIC', 'value' => array($past, $now), ), ), 'meta_key' => 'event_date', 'orderby' => 'meta_value', 'order' => 'DESC', 'nopaging' => false, 'posts_per_page' => '8', ); ``` I can see how an OR relation would include all posts which meet either criteria, but it doesn't do this in the first query. So far as I know there is no ELSE relation but that is the idea I am aiming for here. Why does this work for upcoming events but not for past events?