sql >> Databáze >  >> RDS >> Mysql

tabulka připojení mysql sama o sobě

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"

Upravit

...abyste to mohli použít jako základ pro výpočet roční šířky/délky, můžete buď vytvořit dočasnou tabulku, nebo použít výsledky vložené s dotazem podobným (zjednodušený výpočet DISTANCE) níže

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

Pozn. možná budete chtít použít hrubý filtr na výsledky zeměpisné šířky/délky před provedením „nákladného“ výpočtu zeměpisné šířky/délky na výsledcích nebo před uložením do dočasné tabulky. Záměrem by bylo ignorovat všechny výsledky r1 jasně mimo okruh 10 mil.

Pokud použijete dočasnou tabulku, bude to specifické pro uživatelskou relaci.

Upravit 2

Podívejte se na Tvar Země pro podrobnosti, ale v podstatě 7 minut zeměpisné délky a zeměpisné délky je vždy větší než 10 mil, takže pokud jsou vaše zeměpisná šířka a délky zaznamenány ve stupních, je to dostatečně blízko 0,117. Žádný bod, který se od vašeho cíle liší o více než 0,117, nemůže být uvnitř vašeho okruhu 10 mil. To znamená, že můžete filtrovat tabulku r1 jako :

(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  

Pozn. Pokud vaše data pokrývají Greenwichský poledník, mezinárodní datovou linii nebo rovník, nebude to zcela správné. Za předpokladu, že všechny vaše zeměpisné šířky/délky jsou pro Severní Ameriku, nebude to problém.



  1. Jak vložit do stejné tabulky v MySQL?

  2. Jak zobrazím statistiku dotazů v databázi na webu Wordpress?

  3. Vytvoření tabulky MYSQL s výchozí hodnotou (výrazem) do sloupce

  4. mysql left join sum two tables with rollup