MySQL #1064语法错误:位置附近商家查询SQL报错求助
解决MySQL语法错误:获取最近商家记录的正确SQL写法
嘿,我来帮你搞定这个头疼的SQL语法问题!
错误原因分析
你遇到的#1064语法错误,核心问题是SELECT子句里的字段分隔符缺失:不管你用SELECT *还是指定具体字段,后面跟计算式的时候,必须用逗号把它们分开。MySQL看到SELECT * 111.045...的时候,会误以为111.045是*的参数,完全看不懂这个语法,所以报错。
修正后的完整代码
把SQL语句调整成下面这样,就能正常运行了:
$data_query = mysqli_query($db, " SELECT merchants.*, 111.045 * DEGREES(ACOS(COS(RADIANS(latpoint)) * COS(RADIANS(latitude)) * COS(RADIANS(longpoint) - RADIANS(longitude)) + SIN(RADIANS(latpoint)) * SIN(RADIANS(latitude)))) AS distance_in_km FROM merchants JOIN ( SELECT 33.889676 AS latpoint, 151.193024 AS longpoint ) AS p ON 1=1 ORDER BY distance_in_km LIMIT 15 ");
关键修改点说明
- 我把
SELECT *改成了merchants.*,明确指定从merchants表获取所有字段,避免和子查询里的latpoint/longpoint字段混淆(这是个好习惯,尤其当多表关联时) - 在
merchants.*后面加了逗号,让MySQL清楚地识别出后面的distance_in_km是另一个要查询的字段 - 保留了你原本正确的球面距离计算公式,这个逻辑没问题,用来计算两点间的公里数
新手小技巧
写SQL的时候尽量换行、格式化代码,像上面这样拆分到不同行,能很容易发现逗号遗漏、括号不匹配这类小错误,比挤在一行里好排查多啦!
内容的提问来源于stack exchange,提问作者Hews
相关产品推荐
相关产品推荐

