我很难绕过如何做到这一点,即使我已经完成了所有搜索和阅读!
我正在使用一个查询来尝试从数据库中提取所有用户,这些用户的邮政编码位于给定小数点坐标的特定距离内。这是我正在运行的查询:
select distinct watch_list.username, enabled
from watch_list, registered_users
where watch_list.username = registered_users.username AND watch_list.watchzip = (
SELECT zip,
( 3959 * acos( cos( radians('29.7632800') ) *
cos( radians( lat ) ) *
cos( radians( lng ) -
radians('-95.3632700') ) +
sin( radians('29.7632800') ) *
sin( radians( lat ) ) ) )
AS distance from zip
HAVING distance <= '10');
由于我的子查询返回两列,我得到了错误:
MySQL said: Documentation #1241 - Operand should contain 1 column(s)
如何在没有子查询返回两列的情况下对距离进行过滤?
P.S。只是为了完成和信息,&#34; zip&#34; table包含美国所有邮政编码列表及其小数点坐标。
答案 0 :(得分:1)
只需将操作移出列列表:
select distinct watch_list.username, enabled
from watch_list, registered_users
where watch_list.username = registered_users.username
AND watch_list.watchzip = (
SELECT zip
from zip
WHERE ( 3959 * acos( cos( radians('29.7632800') ) *
cos( radians( lat ) ) *
cos( radians( lng ) -
radians('-95.3632700') ) +
sin( radians('29.7632800') ) *
sin( radians( lat ) ) ) ) <= '10');
编辑:正如P.Salmon所提到的,您可能还想将AND watch_list.watchzip =
更改为AND watch_list.watchzip IN
。