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

有一个需求, 需要根据始发地目的地去搜索对应的运输公司, 始发地目的地需要选择省市区(县), 如果指定的地区没有对应的运输公司, 则给出上一级的运输公司。

例如:
搜索 广东省广州市白云区 到 浙江省杭州市西湖区 的运输公司,
假如上面没有匹配的,那么就搜索广东省广州市白云区 到 浙江省杭州市 的运输公司;
假如上面没有匹配的,那么就搜索广东省广州市 到 浙江省杭州市 的运输公司;
假如上面没有匹配的,那么就搜索广东省广州市 到 浙江省 的运输公司;
假如上面没有匹配的,那么就搜索广东省 到 浙江省 的运输公司;

目前的想法是把这些数据放在一个表里,根据始发地目的地的省市区(县)6个条件去搜索, 然后做几次判断,直至搜索出结果。

正在寻找一个更优的解决方案,求大佬们指点。建表和代码方面,使用的是mysql、php。


qq_笑_17
浏览 243回答 1
1回答

神不在的星期二

我不是大佬,我来说说我的想法吧。首先是地区表示,你知道有种官方的编码叫做行政区划代码吗?这个在民政部可以查到,不过没有格式化的数据。你也可以找网上别人已经整理好的地区库。我们可以把代码存放到数据库中,也可以写到文件中,这就看你自己了。就拿你的例子来说,广东省广州市白云区的代码是440111,浙江省杭州市西湖区是330106。其实代码很好理解,每两位数分别代表省、市、县。44就是广东省,的33就是浙江省。 01在广东省下就是广州市,在浙江省下就是杭州市。表示上级地区的,是在后面补0足6位。比如广东省就是440000,广东省广州市就是440100。所以我们保存某地区的公司时,只要把对应的代码存起来就行了。比如公司表:id name district1 广东省1公司 4400002 广东省2公司 4400003 广东省广州市白云区公司 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;当然,你不想用地区代码,想要自己编码,甚至直接保存中文也是可以的,操作都是类似的。以上代码手机输入,未经过验证,请自行搜索相关内容理解后使用。
打开App,查看更多内容
随时随地看视频慕课网APP