Hy!
我的桌子:
CREATE TABLE IF NOT EXISTS `USER_SETTING` (
`USER_ID` int(11) NOT NULL,
`LATITUDE` float(10,6) NOT NULL DEFAULT '0.000000',
`LONGITUDE` float(10,6) NOT NULL DEFAULT '0.000000',
`MINAGE` int(11) DEFAULT NULL,
`GENDER` varchar(1) DEFAULT NULL,
`DISTANCE` int(11) DEFAULT NULL,
`MAXAGE` int(11) NOT NULL,
PRIMARY KEY (`USER_ID`)
)
查询:
SELECT
user_id,
LONGITUDE,
LATITUDE,
MINAGE,
MAXAGE,
DISTANCE,
(
6371 * acos(
cos(
radians(47.958153)
) * cos(
radians(LANGITUDE)
) * cos(
radians(LATITUDE) - radians(13.780375)
) + sin(
radians(47.958153)
) * sin(
radians(LANGITUDE)
)
)
) AS range
FROM
USER_SETTING
HAVING
range < 800
ORDER BY
range
LIMIT 0, 20
问题:
查询不起作用。
错误消息:
您的SQL语法有错误;查看手册与您的MySQL服务器版本相对应,以便使用正确的语法near'range FROM USER_SETTING HAVING range<800 ORDER BY范围第1行限制0,20'
请帮助
HAVING
仅适用于GROUP
'ed列。由于我没有注意到您的查询中有任何GROUP,所以我将其修改为使用WHERE
子句。
SELECT user_id,
LONGITUDE,
LATITUDE,
MINAGE,
MAXAGE,
DISTANCE,
(6371 * acos( cos( radians(47.958153) ) * cos( radians(LANGITUDE)) * cos(radians(LATITUDE) - radians(13.780375)) + sin(radians(47.958153)) * sin(radians(LANGITUDE)))) AS range
FROM USER_SETTING
WHERE range < 800
ORDER BY range
LIMIT 0 , 20
您需要添加一个Group by
子句才能使用HAVING
,否则使用:
Where range < 800
这个演示是我在这个主题上看到的最好的。我包括工作查询等,以及一般距离计算的性能提示和技巧。
http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL