Mysql 将函数应用于别名字段

Mysql 将函数应用于别名字段,mysql,Mysql,我有一个查询,它创建了两个别名文件,如下所示: (CASE WHEN `venueID` > 0 THEN `venueLongitude` ELSE `specialLongitude` END) AS `longitude` (CASE WHEN `venueID` > 0 THEN `venueLatitude` ELSE `specialLatitude` END) AS `latitude` ((ACOS(SIN($lat * PI() / 180) * SIN(`l

我有一个查询,它创建了两个别名文件,如下所示:

 (CASE WHEN `venueID` > 0 THEN `venueLongitude` ELSE `specialLongitude` END) AS `longitude`
 (CASE WHEN `venueID` > 0 THEN `venueLatitude` ELSE `specialLatitude` END) AS `latitude`
((ACOS(SIN($lat * PI() / 180) * SIN(`latitude` * PI() / 180) + COS($lat * PI() / 180) * COS(`latitude` * PI() / 180) * COS(($lon - `longitude`) * PI() / 180)) * 180 / PI()) * 60 * 1.1515)
确定在某个查询中使用哪个经度和纬度(表中有许多联接,但在本例中,唯一的联接是从执行
自然左联接的
Gigs
表到名为
场馆
的表

该位工作正常,并返回我感兴趣的场地坐标,然后我可以根据这些坐标进行距离计算

“距离”字段如下所示:

 (CASE WHEN `venueID` > 0 THEN `venueLongitude` ELSE `specialLongitude` END) AS `longitude`
 (CASE WHEN `venueID` > 0 THEN `venueLatitude` ELSE `specialLatitude` END) AS `latitude`
((ACOS(SIN($lat * PI() / 180) * SIN(`latitude` * PI() / 180) + COS($lat * PI() / 180) * COS(`latitude` * PI() / 180) * COS(($lon - `longitude`) * PI() / 180)) * 180 / PI()) * 60 * 1.1515)
但是当我运行查询时,我在“字段列表”中得到了错误
未知列“latitude”
。有人知道我如何执行这样的查找吗

p、 美国

虽然我知道我可以使用地理空间查询,但我想知道答案,以便以后可以用于进一步的查询,即

SELECT *,(CASE WHEN `a` > 0 THEN `a` ELSE `b` END) AS `x`,(`x` MOD 3) AS `y` FROM `Foo`
2种方式:

a) 用SQL替换别名

b) 将第一个查询封装为另一个查询,如下所示:

     SELECT 
          t.latitude,
          t.longitude, 
          ((ACOS(SIN($lat * PI() / 180) * SIN(t.latitude * PI() / 180) + COS($lat * PI() / 180) * COS(latitude * PI() / 180) * COS(($lon - t.longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) as distance

     FROM ( 
       SELECT ((CASE WHEN `venueID` > 0 THEN `venueLongitude` ELSE `specialLongitude` END) AS `longitude`, (CASE WHEN `venueID` > 0 THEN `venueLatitude` ELSE `specialLatitude` END) AS `latitude` FROM Gigs left join Venues on ....
     ) as t

如果您想
选择距离,那么我认为您需要重新声明该值的大小写。AKA:您必须执行
选择列别名1,列别名1+1别名2
而不是使用
选择列别名1,列别名1+2
。请查看上的MySQL文档

如果只想按距离进行分组,则可以在距离函数中使用别名。但是,如果要
选择距离,则需要将距离函数中的别名用法替换为已计算的
大小写
代码

ORDER BY
使用别名:

SELECT
  (CASE WHEN `venueID` > 0 THEN `venueLongitude` ELSE `specialLongitude` END) longitude,
  (CASE WHEN `venueID` > 0 THEN `venueLatitude` ELSE `specialLatitude` END) latitude
FROM table_name
ORDER BY ((ACOS(SIN(latitude * PI() / 180) * SIN(latitude * PI() / 180) + COS(latitude * PI() / 180) * COS(latitude * PI() / 180) * COS(longitude * PI() / 180)) * 180 / PI()) * 60 * 1.1515)
SELECT
无法使用别名(它会变得凌乱!):


该死,我希望得到一个更简单的答案,但唉,我确实认为这是一个白日梦。谢谢