请教一个实用而难见的查询问题

toogod 2009-11-27 02:42:17
| |
| |
—————————————A—————————————
| |
| |
| |
B D
| |
| |
| |
—————————————C—————————————
| |
| |
| |
E |
| |
| |


有个需求,就是一个城市有一千多条街道,现要查询某个小范围内的酒店信息,比如上图为几条街道,字母为街道名(同时有字母的街道表示这儿有酒店),
现以C为关键词查询,除了要求查询出街道C的酒店外,还希望查询结果里包含街道C邻近的街道B、D、E的酒店信息。

也就是无论查询哪条街,只要它邻近的街道有酒店信息,就要作为查询结果显示出来,只需要邻近的街道就行了,跨距离的不需要。

当然,这一千多条街道的分布不是方形,是无规律的,请问实现这个功能的具体思路是什么,而且要便于后期数据增减,谢谢!
...全文
114 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
toogod 2009-11-28
  • 打赏
  • 举报
回复
你的意思就是一个一个小范围的街道组成一个组(圈),而组(圈)与组(圈)肯定有交集,交集部分就是数据重复部分?这样可解决同时查询邻近的街道信息,不过数据有点臃肿,组的分布没规律,组与组的关系好像很难建立,不过这样的话也不需要组与组的关系

不知道还有没有更好的方案?

[Quote=引用 7 楼 lingar02 的回复:]
街道1与街道2关系表 A(别用街道与路口关系表  这样不能直查) 重复的最好,这样能简便一些
街道2与酒店关系表 B

select 酒店 from A,B where A.街道2=B.街道2 AND A.街道1=???

街道1与街道2关系表 A的录入就是看一条街,然后把所有相邻街都录入各条记录(会重复一半)

呵呵
[/Quote]
lingar02 2009-11-27
  • 打赏
  • 举报
回复
街道1与街道2关系表 A(别用街道与路口关系表 这样不能直查) 重复的最好,这样能简便一些
街道2与酒店关系表 B

select 酒店 from A,B where A.街道2=B.街道2 AND A.街道1=???

街道1与街道2关系表 A的录入就是看一条街,然后把所有相邻街都录入各条记录(会重复一半)

呵呵
toogod 2009-11-27
  • 打赏
  • 举报
回复
街道表
路口表
街道与路口关系表
酒店表

把二位的综合起来,需要这四个表吗?

另外路口与街道多对多的关系,就能将所有路口形成一张环环相扣相互关联的渔网?从而实现根据这个表找到所有与当前街道相交的街道?

那主要就是“街道与路口关系表”了,这个表数据录入有没什么便捷的法子? 谢谢
womendezhongguo 2009-11-27
  • 打赏
  • 举报
回复
对,我同意bayougeng(梦里楚香)你的说法.
我设计的A表是有问题,通过你说的那样改才对的
bayougeng 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 womendezhongguo 的回复:]
你看这样解决行不行,基本上一个城市的街道名称不会重复吧,要是有区的话呢可以把区和街道做成一个表也可以,这样街道名称就应该不会重复了.相邻的路段我们是可以通过实际调查也好,查地图也好,查出来的.对吧
这样,你呢,创建一个表,比如叫A,有两个字段,将街道的交叉口起个名字,和别的交口区分开,做为主键,将周围的路段作为第二个字段,存进去.

再创建一个表比如叫B,将街道名称设为主键,把表A的主键设为外键,再加上描述这条街道上酒店的一些字段.
这样,你再查询的时候就可以通过主外键关系把街道的信息都带出来了.
当然了,一定要用hibernate啊,方便

[/Quote]
你这个表A有问题。且不说一个字段能否保存多个街道信息,就算你做三个字段,仍然可能出现不够用的情况。肯定是要做个对应表的。路口单独成表,路口与街道做对应表。
bayougeng 2009-11-27
  • 打赏
  • 举报
回复
如果只有这么一个表,保存所有的街道信息,似乎很难办到。
你可考虑再建两个表:
1.路口表。用来保存所有的路口(也就是两个街道交叉点)的信息。
2.路口与街道的对应表。因为路口与街道肯定是多对多的关系。
这样你可以根据这个表找到所有与当前街道相交的街道。

至于地理位置直线距离等,这个就有点复杂了。
womendezhongguo 2009-11-27
  • 打赏
  • 举报
回复
你看这样解决行不行,基本上一个城市的街道名称不会重复吧,要是有区的话呢可以把区和街道做成一个表也可以,这样街道名称就应该不会重复了.相邻的路段我们是可以通过实际调查也好,查地图也好,查出来的.对吧
这样,你呢,创建一个表,比如叫A,有两个字段,将街道的交叉口起个名字,和别的交口区分开,做为主键,将周围的路段作为第二个字段,存进去.

再创建一个表比如叫B,将街道名称设为主键,把表A的主键设为外键,再加上描述这条街道上酒店的一些字段.
这样,你再查询的时候就可以通过主外键关系把街道的信息都带出来了.
当然了,一定要用hibernate啊,方便
  • 打赏
  • 举报
回复
这个问问e都市,哈哈。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧