2010-02-14 71 views
1

我有一些麻煩通過郵編接近查詢工作搜索。我搜索並搜索了谷歌,但是我發現的一切都不是太慢,或者我無法工作。問題出在這裏:通過郵編接近搜索 - MySql

我有一個帶有所有美國郵政編碼表(其中約70,500個)的表的數據庫,並且我有一個包含他們的郵政編碼的幾千個商店(〜10,000 +)的表。我需要能夠提供郵政編碼並將距離最近的商店列表返回給該郵政編碼,並按距離排序。

任何人都可以爲我指出一個很好的資源,它可以處理這麼多的負載,或者分享他們使用過的並且速度相當快的查詢嗎?這將非常感激。謝謝!

+2

下面你說:「好吧,我明白需要做什麼以及haversine公式,什麼不是。我需要的是一些SQL。」 - 要獲得最有用的答案,您需要解釋您遇到問題的部分。 – ysth 2010-02-14 08:17:29

回答

4

你應該建立一個表格,每個郵政編碼都有相關的經度和緯度。當某人輸入拉鍊和距離時,可以計算其中的緯度和經度範圍,然後選擇落在該邊界框內的所有郵政編碼。然後,您可以選擇任何具有該集合中的郵政編碼的商店,然後計算它們與提供的郵政編碼的距離並按照它排序。 (使用haversine formula計算地球儀上的點之間的距離)

如果速度是您主要關心的問題,則可能需要預先計算所有距離。有一張包含商店郵政編碼列,其他郵政編碼和距離列的表格。如果您需要減少行數,您可以將其他郵政編碼限制在一定距離內的郵政編碼(例如100英里,或者你有什麼)。如果您不限制基於距離的鏈接,您將擁有一個擁有超過7億行的表格,但您當然可以快速查找。

+0

好吧,我明白需要做什麼和haversine公式,什麼不是。我需要的是一些SQL。 – Ryan 2010-02-14 07:52:09

+0

好吧,這個haversine的MySQL實現很容易發現 - http://code.google.com/apis/maps/articles/phpsqlsearch.html#findnearsql和http://www.scribd.com/doc/2569355/使用MySQL進行地理距離搜索是http://www.google.com/search?hl=zh-CN&q=haversine+mysql的前兩個匹配項 - 您的實施的某個部分是否失敗?你試過什麼了? – jball 2010-02-14 08:11:58