我找到了这段代码:
SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) + COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon – lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `members` HAVING `distance`<=’10’ ORDER BY `distance` ASC
on this website: http://zcentric.com/2010/03/11/calculate-distance-in-mysql-with-latitude-and-longitude/
看起来应该可行,但除了错误之外我什么都没得到。这是我桌子的结构:
Postal_Code varchar(25)
Place_Name varchar(255)
State varchar(255)
State_Abbreviation varchar(2)
County varchar(255)
Latitude float
Longitude float
所以我重命名了这些字段,但不确定我是否采用了正确的方法:
SELECT ((ACOS(SIN("35.4262" * PI() / 180) * SIN(Latitude * PI() / 180) + COS("35.4262" * PI() / 180) * COS(Latitude * PI() / 180) * COS(("-97.079" – Longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `zipfields` HAVING `distance`<=’10’ ORDER BY `distance` ASC
我选择了一个随机的Lat / Long代替$ lat和$ lon代码。
但我正在尝试的任何工作。表名是zipfields。
你能告诉我我做错了什么吗?谢谢你, -Richard
------更新---------
好的,我从@Pathik_Vejani运行了下面的建议,它确实让我得到了结果:
此代码:
SELECT ((ACOS(SIN("35.4262" * PI() / 180) * SIN(Latitude * PI() / 180) + COS("35.4262" * PI() / 180) * COS(Latitude * PI() / 180) * COS(("-97.079" - Longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `zipfields` HAVING distance<='10' ORDER BY `distance` ASC
将项目列为“距离”...但是当我运行它时,我在phpMyAdmin中看到一个错误。它说:
This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.
此外,列表如下:
distance Ascending
0.00014448859333250288
6.617290577027735
7.585634557261859
7.92136532629013
7.981747924484232
8.65536684196846
如何让结果列出该表中属于该距离的唯一记录,而不是向我显示距离?
示例,在该表中我还有一个auto_increment主键,所以我希望它列出所有那些落在该距离内的id。该字段的名称是:“zfid”
那么有没有办法让它选择zfid
,我给它的经度/纬度在10英里以外?
我不需要距离,我只需要这些记录的列表。
答案 0 :(得分:1)
有一些特殊的字符,所以它不起作用我想,用这个:
SELECT zfid,
((ACOS(SIN("35.4262" * PI() / 180) * SIN(Latitude * PI() / 180) + COS("35.4262" * PI() / 180) * COS(Latitude * PI() / 180) * COS(("-97.079" - Longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance`
FROM `zipfields`
HAVING `distance`<='10'
ORDER BY `distance` ASC
将此距离&lt; ='10'更改为距离&lt; =&#39; 10&#39; ,并更改此 - 经度到 - 经度