如何获得最小半径位置

时间:2016-03-21 06:45:40

标签: mysql join geocoding

我有2张桌子

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

Feed有多个位置。
现在我想在用户当前位置的饲料附近搜索 我需要用户纬度或经度,所以我从谷歌的位置和半径获取 现在我使用这个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表的最低值。

我的查询正在运行,但发出以下信息:

就像单个饲料有10个位置,如1m,2m,3m,4m,5m,10m,100m距离。我想找到5米距离的所有饲料然后它可以工作,但它告诉我这个饲料有5米。距离我的距离但结果应该是1米距离。
我创建了一个小提琴请检查http://sqlfiddle.com/#!9/c408e6/5
根据表1中的小提琴,结果是feed1距离我当前位置4.02m但是这个Feed在table2中有2个位置我已经显示了每个位置距离。所以feed1其中一个位置距离我0英里但它给出的结果是feed1是4.02mile

1 个答案:

答案 0 :(得分:0)

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;

在小提琴中我找出了你看到的这个查询并且它有效,现在结果为0.重点是,如果你对一组没有订购的记录进行分组然后你订购......你不会订购任何东西。您必须订购然后对有序集进行分组。

希望它适合你。

此致