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服务器版本,以便使用正确的语法 接近'范围FROM USER_SETTING HAVING range&lt; 800 ORDER BY范围 在第1行限制0,20'
请帮助
答案 0 :(得分:1)
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
答案 1 :(得分:0)
您需要添加Group by
子句才能使用HAVING
,否则请使用:
Where range < 800
答案 2 :(得分:0)
这个演讲是我在这个主题上看到的最好的。我包括工作查询等,以及一般的距离计算的性能提示和技巧。
http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL