1

所以我正在构建一个交通应用程序,它为我提供了一个数据库上的 stop_id。我如何找到停靠的巴士?例如:10 路和 23 路公交车经过 stop_id# 1234 我尝试了下面的查询,但它每次只为我提供一辆公交车

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 有两辆不同的巴士为其提供服务。我也试过没有 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);

如果您尚未将其定义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 回答