如何获得最小半径位置
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。重点是,如果您对一组未排序的记录进行分组,然后排序...不点任何东西。您必须先排序,然后对排序的集合进行分组。
希望对你有用。
此致
我有 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。重点是,如果您对一组未排序的记录进行分组,然后排序...不点任何东西。您必须先排序,然后对排序的集合进行分组。
希望对你有用。
此致