此查询对我来说非常合适,可以使用数据表中的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计算吗,因为它在技术上还不在表中吗?
答案 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 ...]