2011-12-29 4 views
1

다음 MySQL을 MDB 쿼리로 변환하고 싶습니다. 나는 전혀 액세스 및 .mdb 데이터베이스에 익숙하지 않지만이 프로젝트에 대한 선택의 여지가 없습니다. .mdb에 데이터베이스를 설정하고 간단한 쿼리를 만들 수 있습니다. 다음 쿼리를 mdb 쿼리로 변환하려고합니다. MDB 쿼리에 대한 MySQL 쿼리

SELECT name 
     , lat 
     , lng 
     , (3959 * acos(cos(radians('21.222')) * cos(radians(lat)) 
     * cos(radians(lng) - radians('44.333')) 
     + sin(radians('21.222')) 
     * sin(radians(lat)))) AS distance 
FROM markers 
HAVING distance < '25' 
ORDER BY distance ASC LIMIT 1 

이 쿼리는 기본적으로 경도 ( 21.222,44.333)로, 각 레코드에 대한 latitute, 경도 정보가있는 테이블 마커를 쿼리하고 위도와 더미 장소의 25마일 내에 장소를 반환

감사합니다, Nikhil

+0

액세스 당신이 사용하고 있습니까? –

+0

진술 : SQL 쿼리를 구조에서 SQL로 변경하는 쿼리를 만들 수 있습니다. [this] (http://pcmcourseware.com/blog/2008/09/17/creating-asql-query-in-access-2007/)를 확인하십시오. –

+0

PHP 스크립트에서 .mdb 파일을 쿼리하고 있습니다. 위의 링크가 작동하지 않습니다. – nikhil

답변

4

접근을 인식하지 때문에 당신은 MySQL의 수학 함수에 내장 된 사람들을 위해 자신의 함수를 작성해야합니다. 또한 TOP 1 구문은 약간 다릅니다. 이러한 함수는 액세스 응용 프로그램 내에서만 사용할 수 있으므로 PHP 스크립트에서이 함수를 호출하는 방법을 정말 창의적으로 얻어야 ​​할 수도 있습니다.

은 VBA 코드 모듈에이 수학 함수를 넣어 :

Public Function acos(x As Double) As Double 
'gets the inverse cosine 

    acos = Atn(-x/Sqr(-x * x + 1)) + 2 * Atn(1) 
End Function 

Public Function cos(x As Double) As Double 
'gets the cosine 

    cos = Math.cos(x) 
End Function 

Public Function radians(degrees As Double) As Double 
'returns a degrees measure in radians 

    Const PI = 3.1415926535 

    radians = degrees * PI/180 
End Function 

Public Function sin(x As Double) As Double 
'gets the sine 

    sin = Math.sin(x) 
End Function 

액세스 SQL 쿼리는 다음과 같이 (쿼리 빌더를 사용하여 내장)됩니다

SELECT TOP 1 markers.name, markers.lat, markers.lng, (3959*acos(Cos(radians(21.222))*Cos(radians([lat]))*Cos(radians([lng])-radians(44.333))+Sin(radians(21.222))*Sin(radians([lat])))) AS distance 

FROM markers 

GROUP BY markers.name, markers.lat, markers.lng, (3959*acos(Cos(radians(21.222))*Cos(radians([lat]))*Cos(radians([lng])-radians(44.333))+Sin(radians(21.222))*Sin(radians([lat])))) 

HAVING ((((3959*acos(Cos(radians(21.222))*Cos(radians([lat]))*Cos(radians([lng])-radians(44.333))+Sin(radians(21.222))*Sin(radians([lat])))))<25)) 

ORDER BY (3959*acos(Cos(radians(21.222))*Cos(radians([lat]))*Cos(radians([lng])-radians(44.333))+Sin(radians(21.222))*Sin(radians([lat]))));