Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql таблица за присъединяване към себе си

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"

Редактиране

...за да използвате това като основа за yr lat/long calc, можете или да създадете временна таблица, или да използвате резултатите вградени със заявка, подобна на (опростено изчисление на DISTANCE) по-долу

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. може да искате да приложите груб филтър към вашите резултати за ширина/дълга, преди да направите 'скъпото' изчисление на широчина/дълго на резултатите или преди да го запаметите във времева таблица. Идеята би била да се игнорират всички резултати от r1 ясно извън радиус от 10 мили.

Ако използвате временна таблица, тя ще бъде специфична за потребителската сесия.

Редактиране 2

Разгледайте Формата на Земята за подробности, но по същество 7 минути ширина и дължина винаги са по-големи от 10 мили, така че ако вашите широчина и дължина са записани в градуси, това е 0,117 достатъчно близо. Всяка точка, която се различава с повече от 0,117 от вашата цел, не може да бъде в радиуса ви от 10 мили. Това означава, че можете да филтрирате таблицата r1 като :

(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. Ако вашите данни обхващат Гринуичкия меридиан, международната линия на датите или екватора, това няма да е строго правилно. Ако приемем, че всичките ви lat/longs са за Северна Америка, няма да е проблем.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. изберете произволна стойност въз основа на вероятността

  2. Проблеми със синтаксиса на локалния файл за зареждане на mysql със зададени полета

  3. Не може да се свърже с MySQL сървър грешка 111

  4. Как работи нещо OR DIE() в PHP?

  5. Показване на всички имена на таблици в php от базата данни MySQL