MySQL:Select 仅当字段值升序时
MySQL: Select only if field values are ascending
我有两个 table:路由和停止(一对多)。而且我还有输入数据:两个与 'stop' table 相关的位置 ID。每条路线都有自己的停靠站有序列表。我需要 select 基于具有起点和终点位置的停靠顺序(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 具有开始和结束位置的适当路线。
例如,如果我以芝加哥为起点,以洛杉矶为终点,则查询必须 return 给我纽约到洛杉矶的路线。如果我有芝加哥和纽约的位置 - 它应该有洛杉矶到纽约的路线。
这是我能够创建的查询,但当然它不起作用
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是位置ID输入数据)
如果我有 loc_id 1 和 2
,我需要得到这个结果
--------------------
| id | name |
--------------------
| 1 | first |
--------------------
因此,如果 loc_id = 2 和 1 我需要得到下一个结果:
--------------------
| id | name |
--------------------
| 2 | second |
--------------------
试试这个:
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);
我有两个 table:路由和停止(一对多)。而且我还有输入数据:两个与 'stop' table 相关的位置 ID。每条路线都有自己的停靠站有序列表。我需要 select 基于具有起点和终点位置的停靠顺序(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 具有开始和结束位置的适当路线。 例如,如果我以芝加哥为起点,以洛杉矶为终点,则查询必须 return 给我纽约到洛杉矶的路线。如果我有芝加哥和纽约的位置 - 它应该有洛杉矶到纽约的路线。
这是我能够创建的查询,但当然它不起作用
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是位置ID输入数据)
如果我有 loc_id 1 和 2
,我需要得到这个结果--------------------
| id | name |
--------------------
| 1 | first |
--------------------
因此,如果 loc_id = 2 和 1 我需要得到下一个结果:
--------------------
| id | name |
--------------------
| 2 | second |
--------------------
试试这个:
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);