我最近发布了这个问题:getting distance between two points using google gps api with php
我收到了一个很棒的答复,但是我对这个人的回答有些疑问,由于我对这个网站的低/新状态,我无法回复。在回答我的问题时,其他用户发布了此查询 **
SELECT a.*, 3956 * 2 * ASIN(SQRT( POWER(SIN(($lat - lat) * pi()/180 / 2), 2) + COS($lat * pi()/180) * COS(lat * pi()/180) *
POWER(SIN(($long - longi) * pi()/180 / 2), 2) )) as distance
FROM table
GROUP BY id HAVING distance <= 500
ORDER by distance ASC**
我对这个问题有几个问题,希望有人可以提供帮助。
1.什么是a。*?我在sql中不是超级先进,但效率很高,从未见过这样的东西。我不知道它是否应该代表我的表格中的arbritrary字段或实际字段
2.由于我在php中执行此操作,查询将使用引号,这将使此查询语法略有不同。我想知道是否有人知道查询在引号中会是什么样的。
3.此查询中还有“GROUP BY id”。我在桌面上有一个我正在查询的id字段。这个“id”是否与我表中的id字段相关联?
任何帮助都会很棒。
答案 0 :(得分:0)
您的查询应该是这样的: -
a
在这里是表别名。
SELECT a.*, 3956 * 2 * ASIN(SQRT( POWER(SIN(($lat - lat) * pi()/180 / 2), 2) + COS($lat * pi()/180) * COS(lat * pi()/180) *
POWER(SIN(($long - longi) * pi()/180 / 2), 2) )) as distance
FROM table AS a
GROUP BY id HAVING distance <= 500
ORDER by distance ASC
或者您可以使用简单的
SELECT *, 3956 * 2 * ASIN(SQRT( POWER(SIN(($lat - lat) * pi()/180 / 2), 2) + COS($lat * pi()/180) * COS(lat * pi()/180) *
POWER(SIN(($long - longi) * pi()/180 / 2), 2) )) as distance
FROM table
GROUP BY id HAVING distance <= 500
ORDER by distance ASC