MySQL距离计算

时间:2015-09-02 23:48:32

标签: mysql having

我正在使用以下代码获取输入纬度和经度特定距离内事件的数据库:

List<String> effects = new ArrayList<>();
effects.add("Bleeding");
effects.add("Damaging");
Gun m_one = new Gun("M1", 30, effects, "semi-auto", ".15 cal", "lead", 8);

这很有效。但是,我的一些活动根本没有纬度或经度(它们没有物理位置)。因此,对于他们来说,SELECT *, (3959 * acos( cos( radians( $latitude ) ) * cos( radians( event_latitude ) ) * cos( radians( event_longitude ) - radians( $longitude ) ) + sin( radians( $latitude ) ) * sin( radians( event_latitude ) ) )) AS distance FROM events HAVING distance < $distance event_latitude都等于event_longitude

有没有办法按0HAVING distance抓取?这样我就可以得到一个具有特定距离内事件的结果以及根本没有纬度或经度的事件?

如果我在event_latitude = 0子句中对0进行评估检查,则WHERE检查仍然无效。我无法将评估放在HAVING子句中,因为我收到了一个未知的列错误。

有人有任何想法吗?

2 个答案:

答案 0 :(得分:0)

你想要查看条件选择语句here你可以编写类似于字段为0的内容然后按原样获取它,如果不是,则进行计算。

答案 1 :(得分:0)

也许我错过了一些东西;这不起作用吗?

SELECT *,
    (3959 * acos(
        cos( radians( $latitude ) )
        * cos( radians( event_latitude ) )
        * cos( radians( event_longitude ) - radians( $longitude ) )
        + sin( radians( $latitude ) )
        * sin( radians( event_latitude ) )
    )) AS distance
FROM events
HAVING distance < :distance OR (event_latitude = 0 AND event_longitude = 0)

(注意,我把你的$ distance换成了:距离因为它应该是一个参数)。