If you’re using WordPress 4.2 or newer then you can do the following:
$args = array(
'post_type' => 'events',
'posts_per_page' => 10,
'meta_query' => array(
'relation' => 'AND',
'start_date_clause' => array(
'key' => 'start_date',
'compare' => 'EXISTS',
),
'ticket_status_order_clause' => array(
'key' => 'ticket_status_order',
'compare' => 'EXISTS',
),
),
'order_by' => array(
'start_date_clause' => 'ASC',
'ticket_status_order_clause' => 'ASC',
)
);
You have to create a ticket_status_order because there’s no way to order by string from your available keys/values:
ASC: (I=Invite Only, S=Sold Out, Y=On Sale)
DESC: (Y=On Sale, S=Sold Out, I=Invite Only)
“Sold Out” always sit in the middle.
For more information about the query, take a look here:
Query improvements in WP 4.2: ‘orderby’ and ‘meta_query’