You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:19:14