MySQL: выберите, только если значения полей возрастают - PullRequest
0 голосов
/ 30 мая 2019

У меня есть две таблицы: 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   |
---------------------------

USEПРИМЕР: например, у меня есть 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       |
--------------------

1 Ответ

0 голосов
/ 30 мая 2019

Попробуйте это:

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);
...