Php Haversine公式中的MySQL语法错误
下面的代码中出现了令人沮丧的MySql语法错误。实际误差为: SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第9行“JOIN storetable ON pricelist.storecode=storetable.storecode JOIN itemlist ON”附近要使用的正确语法 附加信息:此代码基于Google Maps Php/MySql示例: 在我尝试添加JOIN语句之前,我能够使这段代码正常工作Php Haversine公式中的MySQL语法错误,php,mysql,google-maps-api-3,mysql-error-1064,Php,Mysql,Google Maps Api 3,Mysql Error 1064,下面的代码中出现了令人沮丧的MySql语法错误。实际误差为: SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第9行“JOIN storetable ON pricelist.storecode=storetable.storecode JOIN itemlist ON”附近要使用的正确语法 附加信息:此代码基于Google Maps Php/MySql示例: 在我尝试添加JOIN语句之前,我能够使这段代码正常工作 $
$query = sprintf("SELECT storetable.storeaddress,
storetable.storename,
storetable.lat,
storetable.lng,
( 3959 * acos( cos( radians('%s') ) *
cos( radians( storetable.lat ) ) * cos(radians(storetable.lng) - radians('%s') ) +
sin( radians('%s') ) * sin( radians( storetable.lat ) ) ) ) AS distance
FROM pricelist
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20,
JOIN storetable ON pricelist.storecode = storetable.storecode
JOIN itemlist ON pricelist.upccode = itemlist.upccode",
mysql_real_escape_string($latitude),
mysql_real_escape_string($longitude),
mysql_real_escape_string($latitude));
$query=sprintf(“选择storetable.storeaddress,
storetable.storename,
storetable.lat,
storetable.lng,
(3959*acos(弧度('%s'))*
cos(弧度(storetable.lat))*cos(弧度(storetable.lng)-弧度('%s'))+
sin(弧度('%s'))*sin(弧度(storetable.lat)))作为距离
从价目表
距离小于25的
按距离排序
限制0,20,,
在pricelist.storecode=storetable.storecode上加入storetable
在pricelist.upccode=itemlist.upccode上加入itemlist“,
mysql\u real\u escape\u字符串($latitude),
mysql\u real\u escape\u字符串($longitude),
mysql_real_escape_字符串($latitude));
联接位于错误的位置-它们位于FROM子句之后,WHERE子句之前-使用:
$query = sprintf("SELECT storetable.storeaddress,
storetable.storename,
storetable.lat,
storetable.lng,
( 3959 * acos( cos( radians('%s') ) *
cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) +
sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance
FROM pricelist
JOIN storetable ON pricelist.storecode = storetable.storecode
JOIN itemlist ON pricelist.upccode = itemlist.upccode
HAVING distance < 25
ORDER BY distance
LIMIT 0, 20",
mysql_real_escape_string($latitude),
mysql_real_escape_string($longitude),
mysql_real_escape_string($latitude));
$query=sprintf(“选择storetable.storeaddress,
storetable.storename,
storetable.lat,
storetable.lng,
(3959*acos(弧度('%s'))*
cos(弧度(纬度))*cos(弧度(lng)-弧度('%s'))+
sin(弧度('%s'))*sin(弧度(纬度)))作为距离
从价目表
在pricelist.storecode=storetable.storecode上加入storetable
在pricelist.upccode=itemlist.upccode上加入itemlist
距离小于25的
按距离排序
限制0,20“,
mysql\u real\u escape\u字符串($latitude),
mysql\u real\u escape\u字符串($longitude),
mysql_real_escape_字符串($latitude));
我不知道MySQL…但是为什么在加入之前要使用ORDER BY
?@taspeotis:你是对的。正如OMG Ponies在下面指出的,ORDER BY在加入之后进行。感谢你为我展示了正确的加入顺序。我发现了一个语法错误:>SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解第13行“LIMIT 0,0”附近使用的正确语法。>20后面的逗号是否可能不正确?@Paul:错误消息与我发布的查询不一致。但是,有一个错误我删除的LIMIT
中的尾随逗号。当我在PhpAdmin中运行此查询时,它工作得很好。但是,当我在程序中运行它时,它没有工作。我忘了提到我正在使用Php PDO。这会有什么不同吗?另一个有趣的事实:当我删除第二个join语句之后的所有内容时,查询工作得很好。@Paul:Sor呃,我不知道/使用PDO