服务端如何做国内外选择城市功能

选择只是用户的行为,而服务端需要做好城市的储存,搜索。

 

国内城市选择效果:

首先只考虑字段之间的关系。

范围是从大到小的:省份--城市--地区

外键关系:一个省份 -- 多个城市;一个城市--多个地区

如何储存:

1. 省份,城市,地区各为一个字段,放在用户的 model 中

2. 只储存最小的、最具体的地点。比如地区。通过地区与其他字段的关系,获取其他字段的值。

 

国外城市的选择

各个国家的行政地区会存在差异。所以如果要兼容国内国外,行政关系就不能固定。将数据储存在树中,用户可以选择任意级别的节点。叶子节点为城市。

在搜索或使用时,将对应节点转化为城市。 转化过程:如果节点为叶子节点,则不变;否则,转化为该节点下所有的城市。比如,选择了悉尼,那么城市为悉尼,选择了澳大利亚,城市为澳大利亚所有城市。

 

数据库设计

 

创建一个 Area model,然后添加联接到自身的外键 sub_areas。

 

如果一个 area 的 sub_areas 为空,则其为叶子节点。

 

参考其他人如何设计这个的:

拉勾

 只存在中国城市。

没有使用行政地区划分,而是使用城市的拼音首字母分类。参考网址

优点:易于扩展。全部在一个页面,可以使用文字搜索功能。

缺点:选择的时候不好选。只能使用城市一级。

 

搜索

使用get参数,?city=广州

直接在搜索框输入

直接在搜索框输入城市+职位名(如:北京 产品经理)

试了一下,发现不准。比如我搜索 `广州 Python`,第一个搜索结果是产品经理的职位,还有其他不相关职位。

 

如果实力不够,就不要用类似搜索引擎的搜索,直接给用户选择框选择比较好。

51job

 

智联

 

难度更高的

跨国企业

谷歌

优步

 

更具体的

找房子的。

58同城

stackoverflow 上的相关问题

Best way to store / structure mysql world country, states, districts, cities…?

What is the “best” way to store international addresses in a database?

posted @ 2017-03-25 21:42  Jay54520  阅读(300)  评论(0编辑  收藏  举报