MySQL查询到MDB查询

时间:2011-12-29 17:44:50

标签: mysql database ms-access

我想将以下MySQL转换为MDB查询。我对访问和.mdb数据库一点都不熟悉,但我对此项目没有选择余地。我在.mdb中设置了数据库,可以对它进行简单的查询。 我试图将以下查询转换为mdb查询。

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

查询基本上是查询表标记,其中包含每个记录的latitute,经度信息,并返回虚拟地点 25 英里内的地点,纬度为经度为( 21.222, 44.333

谢谢, NIKHIL

1 个答案:

答案 0 :(得分:4)

您需要为MySQL Mathematic函数内置的函数创建自己的函数,因为访问将无法识别它们。 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

您的Access 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]))));