1

そのため、データベースに stop_id を提供するトランジット アプリケーションを構築しています。停車するバスを見つけるにはどうすればよいですか? 例: バス 10 と 23 は stop_id# 1234 を通過します。以下のクエリを試しましたが、毎回 1 つのバスしか提供されません。

select distinct r.route_short_name
from routes r, trips t, stop_times st
where r.route_id = t.route_id
and t.trip_id = st.trip_id
and st.stop_id = 

gtfs ファイルを調べたところ、stop_id# 1234 には 2 つの異なるバスがサービスを提供していることがわかりました。私も DISTINCT なしで試してみましたが、同じバスが繰り返し表示されます。コメント/ヘルプ/アイデアは大歓迎です。

4

1 に答える 1

1

あなたは正しい考えを持っていますが、代わりにテーブルを結合する必要があります。これを試して:

SELECT DISTINCT r.route_short_name
    FROM stop_times st
    INNER JOIN trips t ON t.trip_id = st.trip_id
    INNER JOIN routes r ON r.route_id = t.route_id
    WHERE st.stop_id = <stop_id>;

良好なパフォーマンスをstop_times得るには、停車地 ID でルートをすばやく検索できるようにインデックスを作成してください。

CREATE INDEX stop_times_stop_id_trip_id_index ON stop_times(stop_id, trip_id);

それぞれのテーブルの主キーとしてandを定義していない場合は、それらのインデックスも作成する必要があります。route_idtrip_id

CREATE INDEX routes_route_id_index ON routes(route_id);
CREATE INDEX trips_trip_id ON trips(trip_id);
于 2015-07-16T09:41:49.047 に答える