2015-11-18 2 views
1

У меня это 4 таблицы:MySQL: Join таблицы интервалами DATETIME

драйверы

(id, name) 

транспортных средств

(id, license_plate) 

маршруты (от точки к точке пути)

(id, vehicle_id, starting_datetime, ending_datetime) 

driver_working_periods

(id, driver_id, vehicle_id, starting_datetime, ending_datetime) 

В принципе у меня есть, чтобы получить все itineraries конкретного водителя на основе starting_datetime и ending_datetime.

Единственный способ, которым я сумел сделать это делает foreach петлю на driving_working_periods результаты и каждый раз, когда запрос к itineraries таблицы и найти который один соответствует datetime интервалов, а также vehicle_id.

Мне было интересно, есть ли способ сделать это в одном запросе, потому что в каждой таблице есть 1000+ строк, и каждую неделю он будет больше.

спасибо.

+0

В какой таблице 'start_datetime' и' end_datetime' вы хотите использовать? Не возражаете ли вы добавить фиктивное содержимое таблицы и ожидаемый результат? – AnkiiG

+0

Мне нужно использовать datetimes из таблицы work_periods и найти все маршруты, которые находятся в этом интервале. Я настраиваю @Shakil anwer и, похоже, отлично работает –

ответ

1
SELECT * 
FROM `itineraries` a 
INNER JOIN `driver_working_periods` b 
ON `a`.`vehicle_id` = `b`.`vehicle_id` 
AND (TIMESTAMPDIFF(SECOND, `a`.`starting_datetime`, `a`.`ending_datetime`)) = (TIMESTAMPDIFF(SECOND, `b`.`starting_datetime`, `b`.`ending_datetime`)) 
+0

С несколькими настройками ваш ответ отлично работает. Большое спасибо. Не могли бы вы объяснить это, потому что я не очень хорошо понимаю, что происходит. –

+0

Если вы не знакомы с sql join, попробуйте. http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins. это может быть полезно. –

Смежные вопросы