A maneira como eu tentaria entender isso é escrever duas listas em uma parte rotulada como event1 e uma event2. Então liste alguns registros em cada lista (as listas serão idênticas) agora comece no WHERE na descrição abaixo.
Estamos pegando dados de duas tabelas (OK a mesma tabela usada duas vezes, mas tente ignorar isso por enquanto)
FROM mm_eventlist_dates event1
JOIN mm_eventlist_dates event2
Provavelmente ajuda ler o resto de baixo para cima.
WHERE event1.id=$id
Portanto, queremos o registro de event1 que tenha o ID de registro especificado. Presumivelmente, isso é exatamente um registro. Agora descobrimos o dia após o término do evento.
date_add(event1.enddate, INTERVAL 1 DAY)
Agora que nos diz os registros do event2, eles precisam começar nessa data,
ON event2.startdate = date_add(event1.enddate, INTERVAL 1 DAY)
Agora temos dois registros identificados, quais campos queremos?
SELECT event2.id, event2.startdate, event2.price
Oh, apenas os campos daquele cuja data de início descobrimos.