我有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
答案 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.重点是,如果你对一组没有订购的记录进行分组然后你订购......你不会订购任何东西。您必须订购然后对有序集进行分组。
希望它适合你。
此致