2011-10-18 12 views
1

現在、検索用語と住所入力を持つSQLデータベース検索があります。これはGoogleによってlat/lngのためにジオコードされています。今、検索用語との関連性によって最初に結果を並べ、次に静的半径(7マイル)に基づいて距離で並べます。地域のサイズに基づいて半径を検索する - PHP/Google Maps API

"セントラルパーク"の近くで "ジョースミス"を検索すると、最初の結果として登場するブロンクス(静的7マイル以内)に "ジョースミス"が存在する可能性がある実際にセントラルパークにあるすべてのジョーとスミスのことです。この静的な検索半径を、検索される領域の大きさに基づいて自動的に変更して、ニューヨーク市やニューヨーク州でも機能するようにする方法はありますか?または、この問題のより良い解決策がありますか?

私がしようとしているのは、Googleマップ上での検索を模倣しているため、最も関連性の高い検索を最初に行うことができますが、実際に検索された領域です。どんな援助も大いに評価され、あるいは私が取るべきいくつかの異なるアプローチさえも評価されるだろう。ありがとう!

答えて

1

あなたが列namelongitudelatitudeを持っていると仮定、あなたは距離順の結果を得るために、次のクエリを実行できます。

// Long/Lat of the geocoded address (In your case: Central Park) 
$latitude = 40.771133; 
$longitude = -73.974187; 

$sql = " 
SELECT 
    name, 
    ((ACOS(SIN(".$latitude." * PI()/180) * SIN(latitude * PI()/180) + COS(".$latitude." * PI()/180) * COS(latitude * PI()/180) * COS((".$longitude." - longitude) * PI()/180)) * 180/PI()) * 60 * 1.1515) AS distance 

FROM 
    yourtable 

WHERE 1 
    AND name like 'John%' 

HAVING distance <=7 
ORDER BY distance ASC 
LIMIT 10"; 
関連する問題