Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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
Php 从数据库中获取lat/lng点的距离_Php_Mysql_Geolocation - Fatal编程技术网

Php 从数据库中获取lat/lng点的距离

Php 从数据库中获取lat/lng点的距离,php,mysql,geolocation,Php,Mysql,Geolocation,我有以下SQL查询: SELECT vac.vacancy_id AS vacancy_id, vac.title AS vacancy_title, vac.slug AS vacancy_slug, vac.company_name AS vacancy_company_name, vac.c

我有以下SQL查询:

SELECT
        vac.vacancy_id              AS vacancy_id,
        vac.title                   AS vacancy_title,
        vac.slug                    AS vacancy_slug,
        vac.company_name            AS vacancy_company_name,
        vac.company_latitude        AS vacancy_company_latitude,
        vac.company_longitude       AS vacancy_company_longitude,
        cat.slug                    AS vacancy_category_slug,
        (
            6371 *
            acos(
                cos( radians( :latitude ) ) *
                cos( radians( vac.company_latitude ) ) *
                cos(
                    radians( vac.company_longitude ) - radians( :longitude )
                ) +
                sin( radians( :latitude ) ) *
                sin( radians( vac.company_latitude ) )
            )
        ) AS distance
FROM
        vacancies vac
JOIN
        vacancies_categories cat
    ON
        vac.vacancy_category_id = cat.vacancy_category_id
WHERE
        vac.subdomain = :subdomain
    AND
        distance < :distance
    AND
        vac.company_latitude IS NOT NULL
    AND
        vac.company_longitude IS NOT NULL
我还尝试了WHERE子句之前的HAVING子句(HAVING distance<:distance),但这也不起作用

有人有主意吗


提前谢谢

在MySQL(或大多数其他数据库)中不可能重用
WHERE
子句中的
SELECT
子句中定义的别名。这与计算
WHERE
子句时别名不可用有关

MySQL有一个方便的特性,即重载的
具有
操作符,可以像
WHERE
子句一样使用。此外,此
具有
运算符可以使用别名。因此,您可以尝试将对距离别名的检查移动到
HAVING
子句:

WHERE
    vac.subdomain = :subdomain AND
    vac.company_latitude IS NOT NULL AND
    vac.company_longitude IS NOT NULL
HAVING
    distance < :distance;
在哪里
vac.subdomain=:子域和
vac.company_纬度不为空且
vac.U经度不为空
有
距离<:距离;

如果出于某种原因您不喜欢这种方法,那么替代方法可能是在
WHERE
子句中重复
distance
的整个表达式。

在MySQL(或大多数其他数据库)中不可能重用
WHERE
子句中的
SELECT
子句中定义的别名。这与计算
WHERE
子句时别名不可用有关

MySQL有一个方便的特性,即重载的
具有
操作符,可以像
WHERE
子句一样使用。此外,此
具有
运算符可以使用别名。因此,您可以尝试将对距离别名的检查移动到
HAVING
子句:

WHERE
    vac.subdomain = :subdomain AND
    vac.company_latitude IS NOT NULL AND
    vac.company_longitude IS NOT NULL
HAVING
    distance < :distance;
在哪里
vac.subdomain=:子域和
vac.company_纬度不为空且
vac.U经度不为空
有
距离<:距离;

如果出于某种原因您不喜欢这种方法,那么另一种方法可能是在
WHERE
子句中重复
distance
的整个表达式。

它有效!我把HAVING子句放在WHERE子句之前,但把它放在WHERE子句之后就行了!谢谢@昨天你能把这个答案标对吗?答案左边的绿色复选标记。它有效!我把HAVING子句放在WHERE子句之前,但把它放在WHERE子句之后就行了!谢谢@昨天你能把这个答案标对吗?答案左边的绿色复选标记。
WHERE
    vac.subdomain = :subdomain AND
    vac.company_latitude IS NOT NULL AND
    vac.company_longitude IS NOT NULL
HAVING
    distance < :distance;