当lat和long是内部连接时,Lat / Long查询将不起作用。为什么?

时间:2017-04-18 05:47:41

标签: mysql latitude-longitude

此查询对我来说非常合适,可以使用数据表中的lat和long元值来连接位置表。

SELECT
locations_table.location_id AS locationid, lat_table.meta_value AS lat, 
long_table.meta_value AS lng

FROM locations_db.locations AS locations_table         
INNER JOIN  data.data_meta AS lat_table  ON 
lat_table.location_id=locations_table.locaiton_id      
INNER JOIN  data.data_meta AS long_table ON 
long_table.location_id=locations_table.locaiton_id      

WHERE locations_table.master_location='$mastergroupid'
AND lat_table.meta_key='latitude' AND long_table.meta_key='longitude'

但是当我添加这个公式来计算纬度和经度的距离时,它会抛出一个布尔错误。

SELECT locations_table.location_id AS locationid, lat_table.meta_value AS 
lat, long_table.meta_value AS lng,
 SQRT(
POW(69.1 * (lat - $lat), 2) +
POW(69.1 * ($lng - lng) * COS(lat / 57.3), 2)) AS distance

我知道“作为距离”公式适用于表格,其中lat和long只是表格的一部分而不是内部连接。

我错过了什么?我不能对内部连接值进行AS DISTANCE计算吗,因为它在技术上还不在表中吗?

1 个答案:

答案 0 :(得分:0)

您已为meta_value列提供了列别名,并在select子句中使用了这些别名。这是不可能的,见

https://dev.mysql.com/doc/refman/5.7/en/problems-with-alias.html

  

可以在查询选择列表中使用别名来为列a提供   不同的名字。您可以在GROUP BY,ORDER BY或HAVING中使用别名   条款引用专栏:

您必须在计算中编写完整限定表+列名:

SELECT 
  locations_table.location_id AS locationid, 
  lat_table.meta_value AS lat, 
  long_table.meta_value AS lng,
  SQRT(
    POW(69.1 * (lat_table.meta_value - $lat), 2) +
    POW(69.1 * ($lng - long_table.meta_value) * COS(lat_table.meta_value / 57.3), 2)) AS distance
  [... rest of query ...]