2016-03-21 22 views
2

を取得するにはどのように私は2つのテーブル最小半径の場所

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

フィード複数の場所を持っています。
今私はので、私は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_locationの最小距離が必要です。距離フィールドは私に最高値を与えますが、私はfeed_locationsテーブルから最低値を要求します。

私のクエリは機能していますが、それを発行してください:

1つのフィードが1m、2m、3m、4m、5m、10m、私はすべてのフィードが5メートルの距離を見つけたいと思っていますが、それはこのフィードが5メートル持っていることを私に示しています。私からの距離は1mの距離にする必要があります。
私はフィドルを作成しました。http://sqlfiddle.com/#!9/c408e6/5
テーブル1のフィドルによると、フィード1は現在の位置から4.02mですが、このフィードはテーブル2の2つの位置を持っています。私はそれぞれの位置距離を表示しています。今ポイントは0です結果、場所の一つは、私からゼロマイルの距離ですが、それは、私はあなたが見るこのクエリを働いフィドルで

+0

任意の更新?よろしくお願いします。 –

+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; 

4.02マイルfeed1であるという結果が得られ、それが動作するあなたの場合あなたが何も注文していない、あなたは注文したレコードセットを注文していないグループを注文します。注文した後、注文セットをグループ化する必要があります。

ご希望の場合はご利用ください。

よろしく

+0

私のクエリは機能していますが、それを発行してください: 1つのフィードに10mの位置が1m、2m、3m、4m、5m、10m、私はすべてのフィードが5メートルの距離を見つけたいと思っていますが、それはこのフィードが5メートル持っていることを私に示しています。私からの距離は1mの距離にする必要があります。 –

+0

更新を参照してください。私はあなたの行動を再現できません! –

+0

私はこのURLの下でfiddle plzのチェックを作成しましたhttp://sqlfiddle.com/#!9/c408e6/5 –

関連する問題