【发布时间】:2017-09-07 22:47:46
【问题描述】:
我有一个网站,允许用户在他们自己的邮政编码的指定半径范围内搜索其他用户。我首先必须定位用户的纬度和经度,并使用该数据来计算和查找其他用户。我已经根据 2 个必需的表准备了以下查询,但收到需要另一个别名的错误。如果我对这些值进行硬编码,那么当我将它们拆分出来时,就会找到部分查询工作,但是对于多个连接和子查询,我一直不成功。寻求任何指导或帮助。查询和表结构包括在下面。
根据反馈编辑查询和数据集。不再收到错误,但没有收到查询返回的任何数据。
SQL 语句
SELECT u.username, u.zip, m.longitude,
m.latitude,
m.zip from users u, zipcodes m
LEFT JOIN (SELECT s.zip,
s.username from users s) t
on m.zip = t.zip
and t.username = 'tester55'
INNER join ( SELECT zip, city, state, ( 3959 * acos( cos( radians(@m.latitude) ) * cos( radians( latitude ) )
* cos( radians( longitude ) - radians(@m.longitude) ) + sin( radians(@m.latitude) ) * sin(radians(latitude)) ) ) AS distance
FROM zipcodes
HAVING distance < 5000
ORDER BY distance) as RelevantCodes
ON (t.zip=RelevantCodes.zip)
用户表
username zip
-----------------------
tester55 60608
Tester1 60608
iosuser1 73120
Tester3 60608
邮政编码表
latitude longitude zip
--------------------------------
41.8515 -87.6694 60608
35.5835 -97.5638 73120
36.3169 -94.1545 72758
【问题讨论】:
-
关于您的编辑:也许您的想法太复杂了。例如,您可以将
LEFT JOIN (SELECT s.zip, s.username from users s) t替换为LEFT JOIN users(当然,在其余代码中将t替换为users)。但既然我已经给出了一个可行的解决方案,我不会完全分析你的新解决方案:-)
标签: mysql database geolocation gis zipcode