亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據省市區搜索內容, 如當前級別沒有, 則搜索上一級內容?

根據省市區搜索內容, 如當前級別沒有, 則搜索上一級內容?

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 關注
  • 226 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號