SQL查询和计算;正确格式化查询以仅选择 id

Posted

技术标签:

【中文标题】SQL查询和计算;正确格式化查询以仅选择 id【英文标题】:SQL query and calculations; formatting query correctly to select only id 【发布时间】:2015-04-15 21:31:51 【问题描述】:

我有一个查询,它选择 GPS 点 30 英里半径内的所有位置。我想获取这些位置的 id,但它也返回到中心点的距离。

有没有不返回的情况下进行距离计算?

查询:

SELECT id, 3956 * 2 * ASIN(SQRT(
  POWER(SIN((34.1844709 - abs(dest.lat)) * pi()/180 / 2),
  2) + COS(37.7749295 * pi()/180 ) * COS(abs(dest.lat) *
  pi()/180) * POWER(SIN((-118.131809 - dest.lng) *
  pi()/180 / 2), 2) )) as distance
FROM location dest
having distance < 30
ORDER by distance
LIMIT 30

输出:

---------------------------
id    |    distance   
---------------------------
 1    |    2.310
 2    |    2.356
 17   |    4.298

查询基于: http://www.notaires.fr/sites/default/files/geo_searchjkkjkj_0.pdf

【问题讨论】:

是的,只是过去计算而不是别名distance @juergend 当然,如果您这样做,您也必须将计算放入ORDER BY 子句中。将其包装在仅从此结果集中选择 id 列的外部查询中可能更有意义 【参考方案1】:

你可以再做一次选择吗?

Select id
From (SELECT id, 3956 * 2 * ASIN(SQRT(
  POWER(SIN((34.1844709 - abs(dest.lat)) * pi()/180 / 2),
  2) + COS(37.7749295 * pi()/180 ) * COS(abs(dest.lat) *
  pi()/180) * POWER(SIN((-118.131809 - dest.lng) *
  pi()/180 / 2), 2) )) as distance
FROM location dest
having distance < 30
ORDER by distance
LIMIT 30) dst

【讨论】:

distance 在您的第二个查询中未定义。我认为第一个是要走的路。 是的,同意,实际上我们可以按顺序重复公式,但我会选择第一个,所以删除第二个版本

以上是关于SQL查询和计算;正确格式化查询以仅选择 id的主要内容,如果未能解决你的问题,请参考以下文章

查询以仅提取失败的记录

htaccess 重写 URL 以仅删除一个 php 文件的 $_GET 查询[重复]

休眠日志显示更新查询,但没有选择

使用 LIKE 子句正确格式化 sql 查询

组合sql查询中列表参数的正确格式

使用LIKE子句正确格式化sql查询