Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 横向/纵向查询赢得';当板条和长条内连接时,不工作。为什么?_Mysql_Latitude Longitude - Fatal编程技术网

Mysql 横向/纵向查询赢得';当板条和长条内连接时,不工作。为什么?

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

对于我来说,这个查询可以很好地使用数据表中的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
我知道“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中显示为常量。如果正确,您可以自由地接受正确答案:-)