Mysql 在 1 个查询中使用 2 个函数

Mysql use 2 functions in 1 query

我正在尝试在 1 个查询中使用 2 个相同的函数

    select *,  ST_Distance_Sphere( point(
                31.00000, 35.00000),
                point(latitude_0, longitude_0)) * .0001
                as `distance_in_km` ,

          ST_Distance_Sphere( point (
                31.00000, 35.00000),
                point(dest_latitude_0, dest_longitude_0)) * .0001
                as `distance_in_km`

               from `most_places_used` 
                having `distance_in_km` <= '0.001' 
order by `distance_in_km` asc Limit 1

这只使用第一个函数,并且只为第一个 latlngs 给出正确的结果。

我需要几乎接近 2 个 latlngs 的行(latlngs 只是示例,不要在意它是否错误 <3)我想要它给我等于函数的行假设是函数4 列 latlngs

附近的 latlngs

这是列名..如函数 ST_Distance_Sphere

(latitude_0, longitude_0, dest_latitude_0, dest_longitude_0)

我需要与此查询类似的东西做同样的需要或修复它 <3

您为两个不同的列提供了相同的别名,这使得您的查询对于要使用哪一个列进行过滤和排序变得不明确。我会推荐两个不同的别名和 least() 代替:

select *
from (
    select 
        mpu.*,  
        ST_Distance_Sphere( 
            point(31.00000, 35.00000),
            point(latitude_0, longitude_0)
        ) * 0.0001 as distance_in_km1,
        ST_Distance_Sphere( 
            point (31.00000, 35.00000),
            point(dest_latitude_0, dest_longitude_0)
        ) * 0.0001 as distance_in_km2
    from most_places_used mpu
) t
where least (distance_in_km1, distance_in_km2) <= 0.001
order by least (distance_in_km1, distance_in_km2)
limit 1

请注意,我使用了子查询而不是 having 子句:这是一种更标准、更易读的处理方式,无论如何都不会影响性能。

如果不需要区分结果集中的两次计算,可以直接将least()移动到子查询:

select *
from (
    select 
        mpu.*,  
        least(
            ST_Distance_Sphere( 
                point(31.00000, 35.00000),
                point(latitude_0, longitude_0)
            ),
            ST_Distance_Sphere( 
                point (31.00000, 35.00000),
                point(dest_latitude_0, dest_longitude_0)
            )
        ) * 0.0001 as distance_in_km
    from most_places_used mpu
) t
where distance_in_km <= 0.001
order by distance_in_km
limit 1