如何获得最小半径位置

How to get minimum radius location

我有 2 table

1. feeds => id,name
2. feed_locations => id, feed_id, latitude,longitude,location_name

一个 Feed 有多个位置。
现在我想根据用户当前位置的提要搜索附近
我需要用户纬度或经度,所以我从 google 位置和半径
获取 现在我使用这个 mysql 查询

SELECT 
    `Feed`.`id`, 
    `Feed`.`name`, 
    (3959 * acos (cos ( radians(40.7127837) ) * cos( radians( FeedLocation.latitude ) ) * cos( radians( FeedLocation.longitude ) - radians(-74.00594130000002) ) + sin ( radians(40.7127837) ) * sin( radians( FeedLocation.latitude )))) AS `distance`, 
    (Select COUNT(id) FROM feed_locations WHERE feed_id = `Feed`.`id`) AS `location_count` FROM `feeds` AS `Feed` 
    LEFT JOIN `feed_locations` AS `FeedLocation` ON (`FeedLocation`.`feed_id` = `Feed`.`id`) 
    GROUP BY `Feed`.`id` HAVING distance < 10 
    ORDER BY `distance` ASC

这个查询给我结果但是
我需要 feed_locations 与用户当前位置的最小距离。距离字段给我最高值,但我需要 feed_locations table 中的最低值。

我的查询有效,但发出:

就像单个饲料有 10 个位置,距离为 1m、2m、3m、4m、5m、10m、100m。我想找到 5m 距离的所有 feed 然后它工作但它告诉我这个 feed 有 5m。距离我但结果应该是 1 米的距离。
我创建了一个 Fiddle 请检查 http://sqlfiddle.com/#!9/c408e6/5
根据 fiddle in table 1 结果即将到来,feed1 距离我当前位置 4.02m 但此 feed 在 table2 中有 2 个位置,我已经显示了每个位置距离 .so feed1 其中一个位置与我的距离为零英里,但它给出的结果是 feed1 是 4.02mile

SELECT 
a.id,
a.name,
a.distance,
a.location_count
FROM
  (SELECT
    `Feed`.`id`, 
    `Feed`.`name`, 
    (3959 * acos (cos ( radians(40.7127837) ) * 
    cos( radians( FeedLocation.latitude ) ) * 
    cos( radians( FeedLocation.longitude ) -
    radians(-74.00594130000002) ) + sin ( radians(40.7127837) ) * 
    sin( radians( FeedLocation.latitude )))) AS `distance`, 
      (Select COUNT(id) 
         FROM feed_locations 
         WHERE feed_id = `Feed`.`id`) AS `location_count` 
         FROM `feeds` AS `Feed` 
         LEFT JOIN `feed_locations` AS `FeedLocation` ON (`FeedLocation`.`feed_id` = `Feed`.`id`) 
    ORDER BY `distance` ASC) AS a
    GROUP BY a.id HAVING distance < 10;

在 fiddle 中,我计算出了您看到的这个查询并且有效,现在结果为 0。重点是,如果您对一组未排序的记录进行分组,然后排序...不点任何东西。您必须先排序,然后对排序的集合进行分组。

希望对你有用。

此致