2012-05-27 7 views
5

मैं कॉलम latitude और longitude साथ users नाम के एक डेटाबेस है, और मुझे एक निश्चित अक्षांश और देशांतर के लिए एक 50 किमी के दायरे में निकटतम उपयोगकर्ताओं (users तालिका में उन) कर रहे हैं जो बाहर काम करना चाहता हूँ $_POST द्वारा प्रदान किया गया।कार्य MySQL

क्या आप मुझे बता सकते हैं कि मैं यह कैसे कर सकता हूं? क्या कोई निश्चित गणितीय फ़ंक्शन है जिसका उपयोग करने की आवश्यकता है, या MySQL में एक फ़ंक्शन latitude_compare() या कुछ ऐसा है?

+2

[निकटता खोज] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/260335/proximity-search) –

उत्तर

2

आप कुछ इस तरह कर सकते हैं:

SELECT *, 

(ACOS((SIN(RADIANS(ref_latitude))*SIN(RADIANS(latitude))) + 
(COS(RADIANS(ref_latitude))*COS(RADIANS(latitude))*COS(RADIANS(longitude) 
-RADIANS(ref_longitude)))) * 6371) AS distance 

FROM table 
ORDER BY distance ASC 

प्वाइंट: ref_latitude ref_longitude

प्वाइंट बी: अक्षांश देशांतर

मेरे अक्षांश/देशांतर मान डिग्री में हैं, जैसे यह एक:

ड्रेस्डेन: 13.721067614 881400/51.060033646337900

1

यहां एक कोड है जिसका उपयोग मैं कर रहा हूं, यह मील में है। यह दिए गए त्रिज्या के भीतर सभी लैट और एलएनजी का चयन करता है।

$q = "SELECT * (3959 * acos(cos(radians($current_lat)) * cos(radians(lat)) * cos(radians(lng) - radians($current_lng)) + sin(radians($current_lat)) * sin(radians(lat)))) AS distance FROM users HAVING distance < $radius"; 
संबंधित मुद्दे