复杂查询的 MySQL 语法错误

标签 mysql sql database syntax

很抱歉这个 derp 问题(我确信它可能是),但是在阅读手册并通过 Stack Overflow 寻找答案后,我仍然不确定这个数据库查询有什么问题。

一些信息: 我正在尝试创建一个函数,该函数在另一个邮政编码周围的半径内创建所有邮政编码的数组。我用这个作为引用:http://www.movable-type.co.uk/scripts/latlong-db.html

我实际上已经在我的实时站点上使用了这个字符串,但是我现在正在运行 MySQL 5.5.24 的本地主机 (WAMP) 上重做一些工作。该平台是 Wordpress。

我知道数据库名称、字段等周围有引号(或没有引号),我使用了几种变体,但一点都不走运。

总之,废话不多说了。这是错误:

[You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''geo_data' WHERE 'Lat>44.566' AND 'Lat<44.566' AND 'Lon>-109.208' AND 'L' at line 4]

代码如下:

SELECT 'Postcode', 'Lat', 'Lon', 'acos(sin($lat)*sin(radians(Lat)) + cos($lat)*cos(radians(Lat))*cos(radians(Lon)-$lon))*$R' AS D
        FROM (
            SELECT 'Postcode', 'Lat', 'Lon'
            FROM 'geo_data'
            WHERE 'Lat>$minLat' AND 'Lat<$maxLat'
            AND 'Lon>$minLon' AND 'Lon<$maxLon'
        ) 
        AS 'firstcut' 
        WHERE 'acos(sin($lat)*sin(radians(Lat)) + cos($lat)*cos(radians(Lat))*cos(radians(Lon)-$lon))*$R' < '$rad'
        ORDER BY 'D'

感谢您的帮助,如果我遗漏了显而易见的地方,再次抱歉。

编辑

谢谢大家!得到它的工作。这是为他人谋利的工作代码:

SELECT `Postcode`, `Lat`, `Lon`, acos(sin($lat)*sin(radians(`Lat`)) + cos($lat)*cos(radians(`Lat`))*cos(radians(`Lon`)-$lon))*$R AS `D`
        FROM (
            SELECT `Postcode`, `Lat`, `Lon`
            FROM `geo_data`
            WHERE `Lat`>'$minLat' AND `Lat`<'$maxLat'
            AND `Lon`>'$minLon' AND `Lon`<'$maxLon'
        ) 
        AS `firstcut` 
        WHERE acos(sin($lat)*sin(radians(`Lat`)) + cos($lat)*cos(radians(`Lat`))*cos(radians(`Lon`)-$lon))*$R < '$rad'
        ORDER BY `D`

最佳答案

您在字段名和表名周围使用了单引号 '。这是不正确的。你想使用反引号 `。使用引号使 MySQL 将其解释为字符串。

您还在引号内包含了您的条件和计算,这只是将它们变成了字符串。

例如,您的内部查询应如下所示:

SELECT `Postcode`, `Lat`, `Lon`
FROM `geo_data`
WHERE `Lat > '$minLat' AND `Lat` < '$maxLat'
AND `Lon`> '$minLon' AND `Lon` < '$maxLon'

关于复杂查询的 MySQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597333/

相关文章:

mysql - 附加到先前由另一个线程创建的数据集

mysql - 在子查询中使用 order by case

sql - T-SQL : An error occurred while executing batch. 错误消息是:从 MyTable 中选择 * 的算术溢出

mysql - 如何在 MySQL 5.7 中创建六字符密码

php - php mysql 中的分页

javascript - 每次插入数据库时​​自动递增 `trackingcode` 列

php - 自连接获取mysql中的最大深度数

java - SQL 将列的每个值与另一个表中行的所有值进行比较

mysql - MySQL判断主键是否存在的方法

javascript - 第一次更新时对填充字段进行 Sequelize