【问题标题】:sql query SELECT a.*sql 查询 SELECT a.*
【发布时间】:2023-04-04 19:26:01
【问题描述】:

我最近发布了这个问题: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 方面不是超级先进,但效率很高,从未见过这样的事情。我不知道它应该代表我表中的任意字段还是实际字段

2.由于我在 php 中执行此操作,因此查询将使用引号引起来,这将使该查询语法略有不同。我想知道是否有人知道引号中的查询是什么样的。

3.此查询中还有“GROUP BY id”。我的表中有一个要查询的 id 字段。这个“id”是否与我表中的 id 字段相关联?

任何帮助都会很棒。

【问题讨论】:

  • 这是个好问题。 a 未在任何地方指定为别名。
  • 请分享您的表格描述,我对您的 SQL 很好奇
  • 怎么办FROM table,table是sql中的关键字不是吗?

标签: mysql gps


【解决方案1】:

您的查询应该是这样的:- 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

【讨论】:

  • 所以在插入之后,为了澄清一下,$long 和 $lat 是我要比较的变量,而 lat 和 longi 是我表中这些字段的值,对吧?在我的情况下,因为我的领域是纬度和经度,纬度和经度有效地成为纬度和经度?另外,因为我有一个名为 userID 的 id 字段,所以 id 将是我的 userID 字段?
  • 正确。 id 替换为 userID 和 lat 和 long 在这里变成纬度和经度。
猜你喜欢
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
相关资源
最近更新 更多