基于距离计算和google地理编码,如何在mysql中加入查询来查找wordpress帖子?

uajslkp6  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(308)

我正在准备一个查询,以便使用wordpress表结构根据用户的当前位置查找位置。
我正在wordpress中开发这个应用程序。
我创建了一个名为store的自定义post类型。当一个商店是从管理员添加,我能够找到它的 lat/lng 使用地理编码并将其存储在 wp_postmeta 两个元键对应的表 store_lat 以及 store_lng 当基本信息存储在 wp_posts table。
我想通过使用两点之间的距离(其中一点是用户的当前位置)过滤wp\u posttea表中的记录,从wp\u posts表中获取存储。
我构建了以下查询get lat/lng values in one row for each post\u id from wp\u postmeta table,这很好:

SELECT a.post_id, a.meta_value as lat, b.meta_value as lng
FROM
wp_postmeta as a, 
wp_postmeta as b

WHERE a.meta_key = "store_lat"
AND b.meta_key= "store_lng"
AND a.post_id = b.post_id

我还得到了根据用户当前位置查找“最近位置”的查询:

SELECT id, ( 6371 * acos( cos( radians(22) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(88) ) + sin( radians(22) ) * sin( radians( lat ) ) ) ) AS distance FROM***HAVING distance < 1 ORDER BY distance LIMIT 0 , 20;

但我无法将这两个查询合并到一起来查找我们的商店。我不知道该用什么来代替 *** 并从wp\u posts表中获取所需的存储。

inn6fuwd

inn6fuwd1#

我建议这样:

SELECT
store.post_id       AS store_id,
6371 * 2 *  ASIN
                (
                    SQRT
                    (
                        POWER(SIN((store.lat - ABS(user.lat)) * PI()/180 / 2),2)
                        + COS(store.lat * PI()/180) * COS(ABS(user.lat) * PI()/180) * POWER(SIN((store.lng - user.lng) * PI()/180 / 2), 2)
                    )
                )       AS distance                                      
FROM    (SELECT 0.5 AS lat,
                1       AS lng
    ) AS user,
    (SELECT
        a.post_id,
        a.meta_value    AS lat,
        b.meta_value    AS lng
    FROM    wp_postmeta AS a,
            wp_postmeta AS b
    WHERE   a.meta_key = "store_lat" AND
            b.meta_key = "store_lng" AND
            a.post_id = b.post_id
    ) AS store                                                            
ORDER BY distance ASC                                                     
LIMIT 0,20

当然,您可以以不同方式移交用户的位置,也可以应用您的最大距离(例如,距离<1)。
我把距离函数改成了我在这里找到的东西

相关问题