Lat/Long 纬度和经度内部连接时,查询将不起作用。为什么?

Lat/Long query won't work when the lat and long is inner joined. Why?

这个查询非常适合我将 table 个位置与数据 table 中的纬度和经度元值进行内部连接。

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

我知道 "as distance" 公式适用于 table,其中纬度和经度只是 table 的一部分,而不是内部连接。

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

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

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

An alias can be used in a query select list to give a column a different name. You can use the alias in GROUP BY, ORDER BY, or HAVING clauses to refer to the column:

您必须在计算中写入完全限定的 table+列名:

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 ...]