У меня есть две таблицы: Route и Stop (один ко многим). А также у меня есть входные данные: два идентификатора местоположения, которые связаны с таблицей «стоп». У каждого маршрута есть свой УПОРЯДОЧЕННЫЙ список остановок. Мне нужно выбрать маршрут на основе порядка остановок (OLNY, где stop.order восходит), имеющих начальную и конечную точки.
Пример данных:
| ROUTE |
--------------------
| id | name |
--------------------
| 1 | first |
--------------------
| 2 | second |
--------------------
---------------------------
| STOP |
---------------------------
|id | order |loc_id|route_id|
----------------------------
| 1 | 1 | 1 | 1 |
---------------------------
| 2 | 2 | 2 | 1 |
---------------------------
| 3 | 3 | 3 | 1 |
---------------------------
| 4 | 3 | 1 | 2 |
---------------------------
| 5 | 2 | 2 | 2 |
---------------------------
| 6 | 1 | 3 | 2 |
---------------------------
ПРИМЕР ИСПОЛЬЗОВАНИЯ: например, у меня есть 3 местоположения: Лос-Анджелес (id=1), Чикаго (id=2) и Нью-Йорк (id=3). Также есть 2 автобусных маршрута: из Лос-Анджелеса в Нью-Йорк и из Нью-Йорка в Лос-Анджелес. Это означает, что у меня есть 3 автобусные остановки в зависимости от заданных мест для каждого маршрута, но они имеют противоположный порядок. Поэтому мне нужно создать запрос MySQL, чтобы выбрать соответствующий маршрут с начальным и конечным местоположением. Например, если у меня есть Чикаго в качестве отправной точки и Лос-Анджелес в качестве финиша, запрос должен вернуть мне маршрут из Нью-Йорка в Лос-Анджелес. Если у меня есть места в Чикаго и Нью-Йорке, он должен получить маршрут из Лос-Анджелеса в Нью-Йорк.
Это запрос, который я смог создать, но, конечно, он не работает
SELECT `route`.*
FROM `route`
WHERE (SELECT stop.order FROM `stop` WHERE stop.locationId = 1) < (
SELECT stop.order FROM `stop` WHERE stop.locationId = 2)
(где 1 и 2 — входные данные идентификаторов местоположений)
Мне нужен этот результат, если у меня есть loc_id 1 и 2
--------------------
| id | name |
--------------------
| 1 | first |
--------------------
Следовательно, если loc_id = 2 и 1, мне нужно получить следующий результат:
--------------------
| id | name |
--------------------
| 2 | second |
--------------------
в таблице «Стоп» «loc_id» не может быть нулевым. И каждый маршрут имеет как минимум две связанные остановки
Попробуй это:
SELECT R.id, R.name
FROM Stop S
INNER JOIN Route R ON R.id = S.route_id
WHERE
S.loc_id = 1 AND
EXISTS (SELECT Id FROM Stop F WHERE S.route_id = F.route_id AND F.order > S.order AND F.loc_id = 2);
Как бы вы использовали этот запрос в красноречивом Laravel?
Как мы должны интерпретировать вашу
STOP
таблицу? Говорит ли это о том, что существуют маршруты между все изloc_id
для каждого маршрута? Или что-то другое?