出発地と目的地の停留所番号を入力するとルートのリストを出力する公共交通システムのクエリを作成しようとしています。
ここに私のMySQLテーブルがあります:
mysql> desc route_timings;
+----------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| route_number | int(11) | NO | | NULL | |
| stop_number | int(11) | NO | | NULL | |
| arrival_time | time | YES | | NULL | |
| departure_time | time | YES | | NULL | |
+----------------+---------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
サンプル値は次のとおりです。
mysql> select * from route_timings;
+----+--------------+-------------+--------------+----------------+
| ID | route_number | stop_number | arrival_time | departure_time |
+----+--------------+-------------+--------------+----------------+
| 1 | 54 | 1 | 10:00:00 | 10:05:00 |
| 2 | 54 | 2 | 11:00:00 | 11:05:00 |
| 3 | 54 | 3 | 12:00:00 | 12:05:00 |
| 4 | 55 | 3 | 13:00:00 | 13:05:00 |
| 5 | 55 | 4 | 14:00:00 | 14:05:00 |
| 6 | 55 | 5 | 15:00:00 | 15:05:00 |
| 7 | 60 | 3 | 10:00:00 | 10:05:00 |
| 8 | 60 | 2 | 11:00:00 | 11:05:00 |
| 9 | 60 | 1 | 12:00:00 | 12:05:00 |
+----+--------------+-------------+--------------+----------------+
9 rows in set (0.01 sec)
私の質問は次のとおりです。stop_number 1 と stop_number 3 を含む route_number をリストしたい場合は、次のようなクエリを記述します。
SELECT DISTINCT `route_number` FROM `route_timings` WHERE `route_number` IN (
SELECT `route_number` FROM `route_timings` WHERE `stop_number`=1
) AND `route_number` IN (
SELECT `route_number` FROM `route_timings` WHERE `stop_number`=3
);
ただし、上記のクエリでは、2 つのストップを含む route_numbers のみが返され、ソース ストップ (1) が目的地ストップ (3) の前に到着するルートは返されません。
クエリは次を返します。
+--------------+
| route_number |
+--------------+
| 54 |
| 60 |
+--------------+
route_number 60 は 1 から開始して 3 に移動するのではなく、3 から開始して 1 に移動します。誰かがそのビットをクエリに追加して、stop_number 1 のarrival_time が少ない route_numbers のみをクエリが出力するようにしてください。 stop_number 3 のarrival_timeよりも遅くなります。
前もって感謝します。-シャイン