Znalazłem/wymyśliłem kilka innych rozwiązań ale traktuję je póki co jako drogę na około, a nie prawdiłową drogę działania dlatego chciałbym zapytać jeszcze tutaj - moze uda się to zrobić jak należy, a nie na około.
Chcę liczyć odległość od punktu. Na to mamy odpowiedni wzór. Zapytanie do bazy też nie powinno przysparzać problemów ale tutaj sprawa się komplikuje. Otóż postawione na Wordpressie. I moje pytanie odnosi się tylko do zapytania. Tabela wygląda tak:
id post_id meta_key meta_value
640 11 lat 50.0952545
641 11 lng 20.078393600000027
642 11 address Kwiatowa 12
(tabela wp_postmeta)
Czyli ogólnie to co potrzebuję to:
- wyciągnąć z bazy wartości lat i lng
- policzyć dystans
- tam gdzie dystans jest mniejszy niż podany do zapytania zwrócić np. pole address
Na moment obecny mam takie coś:
$wpdb->get_results(sprintf("SELECT meta_value, post_id, ( 3959 * acos( cos( radians('%s') ) * cos( radians( '%s' ) ) * cos( radians( '%s' ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( '%s' ) ) ) ) AS distance FROM wp_postmeta HAVING distance < '%s' ORDER BY distance LIMIT 0 , 200", mysql_real_escape_string($center_lat), // podana przez usera lat $wpdb->get_var("SELECT meta_value FROM wp_postmeta WHERE meta_key = 'lat'"), //brana z bazy wartosc lat $wpdb->get_var("SELECT meta_value FROM wp_postmeta WHERE meta_key = 'lng'"), //brana z bazy wartosc lng mysql_real_escape_string($center_lng), // podana przez usera lng mysql_real_escape_string($center_lat), podana przez usera lat $wpdb->get_var("SELECT meta_value FROM wp_postmeta WHERE meta_key = 'lat'"), //brana z bazy lat mysql_real_escape_string($radius)))//podany przez usera dystans
I nie wiem jak to doprowadzić do działania. Ogólnie wydaje mi się, że błąd popełniłem przy wybieraniu wlasnie z bazy tych lat i lng natomiast nie do końca wiem jak to zrobić. Czy mógłby mi ktoś powiedzieć jak powinno wyglądać prawidłowe zapytanie?
Edit:
Tak, siedzenie po nocach nie pomaga... Tutaj powinien być jakiś INNER JOIN zamiast sprintf'a prawda?
