2016-03-21 12 views
2

almak için nasıl 2 tablolarasgari yarıçap konumu

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

bir besleme birden çok yeri var var.
şimdi ben kullanıcı geçerli konumundan besleme yakınında aramak istediğiniz
Ben bu yüzden google konumu ve yarıçapı alımın
Şimdi ben bana neden vererek bu mysql sorgu

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 

Bu sorguyu kullanmak kullanıcı enlem veya boylam gerektirir ancak
i kullanıcı geçerli konumdan feed_locations en az mesafe gerektirir. Uzak alan bana en yüksek değeri verir, ancak feed_locations tablosundan en düşük değere ihtiyacım var.

Sorgum çalışıyor ancak sorunu çözelim:

Tek bir feed'in 10 konum gibi 1m, 2m, 3m, 4m, 5m, 10m, 100m mesafesi olması gibi. ve tüm beslemeyi 5 metre mesafeden bulmak istiyorum, ancak bu beslemenin 5m olduğunu gösteriyor. benden uzaklık ama sonuç 1m mesafe olmalıdır.
http://sqlfiddle.com/#!9/c408e6/5
Bir tablo oluşturduktan sonra tablodaki küme tablosuna göre, sonuç 1, şu anki konumumdan 4.02 m besleme geliyor, fakat bu feed'in tablo2'de 2 konumu var. Şimdi noktasıdır 0'dır sonucu, yer biri benden sıfır mil mesafede ama ben gördüğünüz bu sorguyu çalıştı keman olarak

+0

Herhangi bir güncelleştirme var mı? Saygılar –

+0

Yarın güncellenir i –

cevap

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.02mile feed1 olduğu sonucunu verir ve bunun işe yaradığını eğer Sıralı olmayan bir dizi kayıt grubunu ve sonra sipariş verdiğinizde ... hiçbir şey sipariş etmiyorsunuz. Siparişi vermeniz ve siparişi vermeniz gerekir.

Umut sizin için çalışıyor.

Saygılar

+0

Benim sorgum çalışıyor ama bunu sorun: Tek bir besleme 10 konum gibi 1m, 2m, 3m, 4m, 5m, 10m, 100m mesafe var mı gibi. ve tüm beslemeyi 5 metre mesafeden bulmak istiyorum, ancak bu beslemenin 5m olduğunu gösteriyor. benden uzaklık ama sonuç 1m mesafe olmalıdır. –

+0

Güncellemeye bakın. Senin davranışını yeniden üretemiyorum! –

+0

Bu url altında fiddle plz denetimi oluşturduk http://sqlfiddle.com/#!9/c408e6/5 –