Обычно в сервисах делают фиксированную дату вылета. т.е. если пользователь ищет билет только "туда" то он вводит желаемую дату вылета и система ищет билет из точки А в точку Б с вылетом в указанную дату.
Если ищется билет "туда и обратно" то к результатам первого поиска добавляются результаты поиска по второй дате где отправные точки меняются местами. Если же нужно дату вылета и возврата задать промежутком, а не фиксированную то запрос будет примерно такой:
1. для поиска только "туда"
SELECT * FROM `flights` WHERE
(`departure_time` BETWEEN 'user_departure_wants_min' AND 'user_departure_wants_max'
AND `departure_airport` = user_departure_wants_from
AND `arrive_airport` = user_arrive_wants_to);
2. для поиска "туда и обратно"
SELECT * FROM `flights` WHERE
(`departure_time` BETWEEN 'user_departure_1_wants_min' AND 'user_departure_1_wants_max'
AND `departure_airport` = user_departure_wants_from
AND `arrive_airport` = user_arrive_wants_to)
OR
(`departure_time` BETWEEN 'user_departure_2_wants_min' AND 'user_departure_2_wants_max'
AND `departure_airport` = user_arrive_wants_to
AND `arrive_airport` = user_departure_wants_from)
Где user_departure_wants_min, user_departure_wants_max, user_departure_1_wants_min, user_departure_1_wants_max - минимальная и максимальная дата вылета "туда"
user_departure_2_wants_min, user_departure_2_wants_max минимальная и максимальная дата вылета "обратно"
user_departure_wants_from - аэропорт из которого пользователь хочет вылететь(и куда хочет вернуться в случае поиска "туда и обратно")
user_arrive_wants_to - аэропорт куда пользователь хочет прилететь(и откуда хочет улететь в случае поиска "туда и обратно")
Как-то так мне кажется оно должно быть. Этот вариант учитывает только поиск прямых перелетов. Поиск с пересадками естественно будет намного сложнее.