Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql dołącza do tabeli na siebie

select t1.post_id, t1.meta_value as lat, t2.meta_value as lon
from metatdatatable t1, metadatatable t2
where t1.meta_key = "_wp_field1"
and t2.post_id = t1.post_id
and t2.meta_key = "_wp_field2"

Edytuj

...aby użyć tego jako podstawy do obliczenia yr lat/long, możesz albo utworzyć tabelę tymczasową, albo użyć wyników w tekście z zapytaniem podobnym do (uproszczonego obliczenia ODLEGŁOŚCI) poniżej

select d1.post_id, d1.distance
from
(select r1.post_id, ABS($lat - r1.lat) + ABS($lon - r1.lon) as DISTANCE
from (select t1.post_id, t1.meta_value as lat, t2.meta_value as lon
    from metatdatatable t1, metadatatable t2
    where t1.meta_key = "_wp_field1"
    and t2.post_id = t1.post_id
    and t2.meta_key = "_wp_field2") as r1
) as d1
where d1.distance <= 10
order by d1.distance ASC

NB. możesz chcieć zastosować zgrubny filtr do wyników szerokości/długości przed wykonaniem „kosztownego” obliczenia szerokości/długości na wynikach lub przed zapisaniem w tabeli tymczasowej. Pomysł polegałby na zignorowaniu wszystkich wyników r1 wyraźnie poza promieniem 10 mil.

Jeśli użyjesz tabeli tymczasowej, będzie ona zależna od sesji użytkownika.

Edytuj 2

Zobacz Kształt Ziemi dla szczegółów, ale zasadniczo 7 minut szerokości i długości geograficznej jest zawsze większe niż 10 mil, więc jeśli twoje szerokości i długości są rejestrowane w stopniach, jest to wystarczająco blisko 0,117. Każdy punkt różniący się o więcej niż 0,117 od celu nie może znajdować się w promieniu 10 mil. Oznacza to, że możesz filtrować tabelę r1 w następujący sposób:

(select t1.post_id, t1.meta_value as lat, t2.meta_value as lon
        from metatdatatable t1, metadatatable t2
        where t1.meta_key = "_wp_field1"
        and t2.post_id = t1.post_id
        and t2.meta_key = "_wp_field2"
        and ABS(t2.meta_value - $lon) < 0.117
        and ABS(t1.meta_value - $lat) < 0.117
) as r1  

NB. Jeśli Twoje dane obejmują południk Greenwich, międzynarodową linię zmiany daty lub równik, nie będzie to całkowicie poprawne. Zakładając, że wszystkie twoje łaty/długie dotyczą Ameryki Północnej, nie będzie problemu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQLdb Pythona nie może znaleźć libmysqlclient.dylib z Homebrewed MySQL

  2. Przykłady UTC_DATE – MySQL

  3. Zapytania parametryczne MySQL

  4. Zwróć ranking z wielu tabel za pomocą mySQL

  5. Mysql - Jak uporządkować wyniki naprzemiennie (1,2,3, 1, 2, 3, 1, 2, 3,) rzędy, czy to możliwe?