有一个需求, 需要根据始发地和目的地去搜索对应的运输公司, 始发地和目的地需要选择省市区(县), 如果指定的地区没有对应的运输公司, 则给出上一级的运输公司。
例如:
搜索 广东省广州市白云区 到 浙江省杭州市西湖区 的运输公司,
假如上面没有匹配的,那么就搜索广东省广州市白云区 到 浙江省杭州市 的运输公司;
假如上面没有匹配的,那么就搜索广东省广州市 到 浙江省杭州市 的运输公司;
假如上面没有匹配的,那么就搜索广东省广州市 到 浙江省 的运输公司;
假如上面没有匹配的,那么就搜索广东省 到 浙江省 的运输公司;
目前的想法是把这些数据放在一个表里,根据始发地和目的地的省市区(县)6个条件去搜索, 然后做几次判断,直至搜索出结果。
正在寻找一个更优的解决方案,求大佬们指点。建表和代码方面,使用的是mysql、php。
我不是大佬,我来说说我的想法吧。
首先是地区表示,你知道有种官方的编码叫做行政区划代码吗?这个在民政部可以查到,不过没有格式化的数据。你也可以找网上别人已经整理好的地区库。
我们可以把代码存放到数据库中,也可以写到文件中,这就看你自己了。
就拿你的例子来说,广东省广州市白云区的代码是
440111
,浙江省杭州市西湖区是330106
。其实代码很好理解,每两位数分别代表省、市、县。
44
就是广东省,的33
就是浙江省。01
在广东省下就是广州市,在浙江省下就是杭州市。表示上级地区的,是在后面补0足6位。
比如广东省就是
440000
,广东省广州市就是440100
。所以我们保存某地区的公司时,只要把对应的代码存起来就行了。
比如公司表:
id name district
1 广东省1公司 440000
2 广东省2公司 440000
3 广东省广州市白云区公司 440111
在网页地区选择中,返回的value只要对应价格两位就够了。
比如
sheng=44&shi=01&xian=11
我们处理时补出三个代码
440000、440100和440111
然后我们直接查找公司表
如
SELECT * FROM company WHERE district=440000 OR district=440100 OR district=440111;
然后返回结果,我们再一一检查就行了。
当然,可能公司很多,一次返回的结果太多了,我们可以先查询440111的,有结果就返回,没有就再查询440100的,以此类推。
甚至,我们能在SQL中就完成这个操作
当然,你不想用地区代码,想要自己编码,甚至直接保存中文也是可以的,操作都是类似的。
以上代码手机输入,未经过验证,请自行搜索相关内容理解后使用。