Mysql 横向/纵向查询赢得';当板条和长条内连接时,不工作。为什么?
对于我来说,这个查询可以很好地使用数据表中的lat和long元数据内部连接位置表Mysql 横向/纵向查询赢得';当板条和长条内连接时,不工作。为什么?,mysql,latitude-longitude,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
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”公式适用于lat和long只是表格的一部分而不是内部连接的表格
我错过了什么?我可以不对内部联接值进行距离计算吗,因为从技术上讲,它还不在表中?您已经为
meta\u值
列指定了列别名,并且在select
子句中使用了这些别名。这是不可能的,请参见
:
可以在查询选择列表中使用别名为列指定名称
不同的名字。您可以在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 ...]
更新-这意味着lat和long在AS距离子查询中是未知的。这怎么可能?它们是定义的我想如果没有看到实际的查询就很难提供帮助,但是如果我理解正确,那么是的,子查询别名对于“超级”查询不可用。相反,你可以直接写出距离部分。这可能看起来很乏味,但效率并不是特别低。顺便说一句,构建udf或存储过程来计算距离并不罕见。它节省了一点输入。为什么在公式中有这些美元符号(
$lat
和$lng
)?@phalum-这将是客户端语言中变量的PHP或Perl语法;它们将在SQL中显示为常量。如果正确,您可以自由地接受正确答案:-)