初めて GTFS 構造を使用していますが、クエリに問題があります。トランジット データを mysql テーブルに格納し、自由にクエリを実行できますが、最も単純な情報を取得するには、あまりにも多くのクエリと for ループを実行しているように感じます。
1 つのクエリで取得したいのは、2 つの既知の停留所間のすべての出発時刻と到着時刻であり、おそらく名前で識別されます。
これは私がこれまでに持っているもので、クエリが含まれ、その後に各 trip_id をループして、出発駅と到着駅の情報 + 時間を見つけます。
クエリ 1 :
特定の出発駅から特定の方向へのすべての出発時刻を表示します。結果は、出発時刻と trip_ids を示します。
SELECT t.trip_id, trip_headsign, departure_time, direction_id, s.stop_name
FROM stops s, routes r, stop_times st, calendar c, trips t
WHERE departure_time > "00:00:00" and departure_time < "23:59:59"
AND r.route_id=1 and s.stop_id = 42
AND s.stop_id = st.stop_id
AND st.trip_id = t.trip_id
AND c.service_id = t.service_id
AND c.monday=1 and direction_id=1;
結果
+---------+---------------+----------------+--------------+-----------+
| trip_id | trip_headsign | departure_time | direction_id | stop_name |
+---------+---------------+----------------+--------------+-----------+
| 5671498 | Grand Central | 04:43:00 | 1 | Garrison |
| 5671501 | Grand Central | 05:13:00 | 1 | Garrison |
| 5671504 | Grand Central | 05:43:00 | 1 | Garrison |
| 5671506 | Grand Central | 06:08:00 | 1 | Garrison |
| 5671507 | Grand Central | 06:32:00 | 1 | Garrison |
| 5671513 | Grand Central | 06:53:00 | 1 | Garrison |
| 5671516 | Grand Central | 07:18:00 | 1 | Garrison |
| 5671519 | Grand Central | 07:40:00 | 1 | Garrison |
| 5671521 | Grand Central | 08:03:00 | 1 | Garrison |
| 5671523 | Grand Central | 08:32:00 | 1 | Garrison |
| 5671525 | Grand Central | 08:58:00 | 1 | Garrison |
| 5671526 | Grand Central | 09:27:00 | 1 | Garrison |
| 5671529 | Grand Central | 10:24:00 | 1 | Garrison |
| 5671532 | Grand Central | 11:24:00 | 1 | Garrison |
| 5671535 | Grand Central | 12:24:00 | 1 | Garrison |
| 5671537 | Grand Central | 13:24:00 | 1 | Garrison |
| 5671540 | Grand Central | 14:24:00 | 1 | Garrison |
| 5671542 | Grand Central | 15:24:00 | 1 | Garrison |
| 5671543 | Grand Central | 16:22:00 | 1 | Garrison |
| 5671547 | Grand Central | 17:24:00 | 1 | Garrison |
| 5671550 | Grand Central | 18:24:00 | 1 | Garrison |
| 5671552 | Grand Central | 19:26:00 | 1 | Garrison |
| 5671554 | Grand Central | 20:24:00 | 1 | Garrison |
| 5671556 | Grand Central | 21:24:00 | 1 | Garrison |
| 5671557 | Grand Central | 22:24:00 | 1 | Garrison |
| 5671559 | Croton-Harmon | 23:24:00 | 1 | Garrison |
+---------+---------------+----------------+--------------+-----------+
クエリ 2 :
最後のクエリの trip_id を使用して、特定のルートのすべての停車地とその到着時刻を教えてください。
SELECT s.stop_id,stop_lat, stop_lon, stop_name, arrival_time, stop_sequence
FROM stop_times st JOIN stops s ON s.stop_id=st.stop_id
WHERE trip_id=5671521;
結果
+---------+-----------+------------+------------------+--------------+---------------+
| stop_id | stop_lat | stop_lon | stop_name | arrival_time | stop_sequence |
+---------+-----------+------------+------------------+--------------+---------------+
| 51 | 41.705839 | -73.937946 | Poughkeepsie | 07:31:00 | 1 |
| 49 | 41.587448 | -73.947226 | New Hamburg | 07:41:00 | 2 |
| 46 | 41.504007 | -73.984528 | Beacon | 07:50:00 | 3 |
| 43 | 41.415283 | -73.958090 | Cold Spring | 07:58:00 | 4 |
| 42 | 41.381780 | -73.947202 | Garrison | 08:03:00 | 5 |
| 40 | 41.332601 | -73.970426 | Manitou | 08:08:00 | 6 |
| 39 | 41.285962 | -73.930420 | Peekskill | 08:17:00 | 7 |
| 37 | 41.246259 | -73.921884 | Cortlandt | 08:22:00 | 8 |
| 33 | 41.189903 | -73.882394 | Croton-Harmon | 08:32:00 | 9 |
| 4 | 40.805157 | -73.939149 | Harlem-125th St. | 09:09:00 | 10 |
| 1 | 40.752998 | -73.977056 | Grand Central | 09:22:00 | 11 |
+---------+-----------+------------+------------------+--------------+---------------+
私が本当に欲しいのは、次の理論上の結果のような、2 つの停留所間の出発時間と到着時間のリストです。
+---------+----------------+----------------+-----------+---------------+--------------+
| trip_id | departure_stop | departure_time | direction | arrival_stop | arrival_time |
+---------+----------------+----------------+-----------+---------------+--------------+
| 5671521 | Garrison | 08:03:00 | 1 | Grand Central | 09:22:00 |
| 5671522 | Garrison | 08:32:00 | 1 | Grand Central | 09:51:00 |
...etc...