现在要做一个这样的东东,也就是那种公交查询网,但是我看了一些觉得查询显示都不是很好,应该说不是很友好,完美。1)线路查询,这个好说
2)单个站点查询,也还ok
3)换乘查询,目前没有太好的想法怎么来设计这个数据库,才能方便高效的实现上述三种查询,或者更多补充的尤其是换乘时候,我觉得模糊列出一大堆路线这个不太好,最好是直接找出两条线路最近的换乘方式显示给用户。大家都发表下意见,怎么来更好的设计公交数据库,一个表,还是多个表,效率各方面最好都考虑到~先谢谢大家了!

解决方案 »

  1.   

    建如下一个表(bus),如: 
    (line)线路 (station)站点
    1路          beijing
    1路          tianjin
    1路          shanghai
    2路          haerbin
    2路          tianjin
    2路          jinan
    2路          shanghai
    ....查询tianjin到shanghai:
    直接到不用倒车的查询:select * from bus a left join bus b on a.line=b.line where a.station!=b.station and a.station='tianjin' and b.station='shanghai'倒一次车:select * from 
           (select a.line line1, a.station station1, b.line line2, b.station station2
                   from bus a left join bus b on a.line=b.line 
                   where a.station!=b.station and a.station='tianjin') t1 left join
           (select c.line line3, c.station station3, d.line line4, d.station station4
                   from bus c left join bus d on c.line=d.line 
                   where c.station!=d.station and d.station='shanghai') t2
           on t1.station2 = t2.station3
           where station3 is not null
      

  2.   

    建如下一个表(bus),如: 
    (line)线路 (station)站点
    1路          beijing
    1路          tianjin
    1路          shanghai
    2路          haerbin
    2路          tianjin
    2路          jinan
    2路          shanghai
    ....查询tianjin到shanghai:
    直接到不用倒车的查询:select * from bus a left join bus b on a.line=b.line where a.station!=b.station and a.station='tianjin' and b.station='shanghai'倒一次车:select * from 
           (select a.line line1, a.station station1, b.line line2, b.station station2
                   from bus a left join bus b on a.line=b.line 
                   where a.station!=b.station and a.station='tianjin') t1 left join
           (select c.line line3, c.station station3, d.line line4, d.station station4
                   from bus c left join bus d on c.line=d.line 
                   where c.station!=d.station and d.station='shanghai') t2
           on t1.station2 = t2.station3
           where station3 is not null
      

  3.   

    给select a.line line1, a.station station1, b.line line2, b.station station2
                   from bus a left join bus b on a.line=b.line 
                   where a.station!=b.station  建个视图应该会省不少SQL语句
      

  4.   

    你又说已有的不好,不好肯定是从用户的角度看
    我觉得google已经做到不错了,把所有可能都列出来
    不过就是一点不好,两条公交线路有多个站点重叠,它却只给出一个来在大城市你的考虑多次换乘,你试试google,轨道交通的级别比较高。
    会告诉你先上某车,再坐地铁,再倒地铁,再倒汽车如果你只是做个课程设计,那倒可以按照你的想法试试合理是按照客户需求来到,你的合理不代表客户的合理。
      

  5.   

    看到网上很多人说这样来设计 
    --线路 站点 站点序号 方向--不知道这样是啥用意,查询时候还要顾及方向么?简单的按照楼上兄弟似乎查询太复杂了点
    如果我把包含开始站点tianjin这个站点的所有公交查出来,在把包含到达站点shanghai的所有线路找出来
    这样再把两个数组拿到前台页面去判断交集,这样可行不?