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
无法使用别名(它会变得凌乱!):
该死,我希望得到一个更简单的答案,但唉,我确实认为这是一个白日梦。谢谢