MySQL 查询到 MDB 查询
Posted
技术标签:
【中文标题】MySQL 查询到 MDB 查询【英文标题】:MySQL query to MDB query 【发布时间】:2011-12-29 17:44:49 【问题描述】:我想将以下 mysql 转换为 MDB 查询。我完全不熟悉 access 和 .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)
谢谢, 尼基尔
【问题讨论】:
顺便说一句:您可以进行 SQL 查询,将查询编辑从结构更改为 SQL - 您知道吗?签出this。 我正在从 php 脚本查询 .mdb 文件,上面的链接不起作用 【参考方案1】:您需要为那些内置的 MySQL 数学函数创建自己的函数,因为 access 无法识别它们。 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]))));
【讨论】:
以上是关于MySQL 查询到 MDB 查询的主要内容,如果未能解决你的问题,请参考以下文章