为了账号安全,请及时绑定邮箱和手机立即绑定

根据省市区搜索内容, 如当前级别没有, 则搜索上一级内容?

根据省市区搜索内容, 如当前级别没有, 则搜索上一级内容?

qq_笑_17 2018-07-21 07:57:15
有一个需求, 需要根据始发地和目的地去搜索对应的运输公司, 始发地和目的地需要选择省市区(县), 如果指定的地区没有对应的运输公司, 则给出上一级的运输公司。例如:搜索 广东省广州市白云区 到 浙江省杭州市西湖区 的运输公司,假如上面没有匹配的,那么就搜索广东省广州市白云区 到 浙江省杭州市 的运输公司;假如上面没有匹配的,那么就搜索广东省广州市 到 浙江省杭州市 的运输公司;假如上面没有匹配的,那么就搜索广东省广州市 到 浙江省 的运输公司;假如上面没有匹配的,那么就搜索广东省 到 浙江省 的运输公司;目前的想法是把这些数据放在一个表里,根据始发地和目的地的省市区(县)6个条件去搜索, 然后做几次判断,直至搜索出结果。正在寻找一个更优的解决方案,求大佬们指点。建表和代码方面,使用的是mysql、php。
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

我不是大佬,我来说说我的想法吧。

首先是地区表示,你知道有种官方的编码叫做行政区划代码吗?这个在民政部可以查到,不过没有格式化的数据。你也可以找网上别人已经整理好的地区库。

我们可以把代码存放到数据库中,也可以写到文件中,这就看你自己了。

就拿你的例子来说,广东省广州市白云区的代码是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中就完成这个操作

SELECT
  CASE
    WHEN EXIST(SELECT * FROM company WHERE district=440111) THEN (SELECT * FROM company WHERE district=440111)    WHEN EXIST(SELECT * FROM company WHERE district=440100) THEN (SELECT * FROM company WHERE district=440100)    ELSE (SELECT * FROM company WHERE district=440000)  END;

当然,你不想用地区代码,想要自己编码,甚至直接保存中文也是可以的,操作都是类似的。

以上代码手机输入,未经过验证,请自行搜索相关内容理解后使用。



查看完整回答
反对 回复 2018-07-21
  • 1 回答
  • 0 关注
  • 242 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号