2011-12-29 110 views
1

我想将下面的MySQL转换为MDB查询。我完全不熟悉access和.mdb数据库,但是我没有选择这个项目。我已经在.mdb中建立了数据库,并且可以对它进行简单的查询。 我想将以下查询转换为mdb查询。MySQL查询到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,经度的信息的表的标记并返回其内英里随纬度虚设地点的地方,经度(21.222,44.333

感谢, 尼基尔

+0

访问您使用的是哪一种? – 2011-12-29 17:46:20

+0

BTW:您可以使SQL查询将查询编辑从结构更改为SQL - 您知道这是正确的吗?检查[this](http://pcmcourseware.com/blog/2008/09/17/creating-asql-query-in-access-2007/)。 – 2011-12-29 17:48:09

+0

我正在查询PHP脚本中的.mdb文件,上面的链接不起作用 – nikhil 2011-12-29 18:24:47

回答

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]))));